30/09/2018, 16:57

Một hàm không nên có hai vòng for?

Hồi trước Đạt không nhớ đã đọc ở đâu, rất có thể là Code Complete 2, có nói rằng một hàm không nên có hai vòng for.

Lý do?

Bởi vì một vòng for đủ để thực hiện một công việc gì đó có ý nghĩa rồi. tại sao không tạo ra riêng một hàm chỉ để xử lý công việc của vòng for đó. Việc này sẽ giúp cho việc viết code rõ ràng hơn.

Chú ý:

  • Hai for lồng nhau tương đối ổn, Ba for trở đi là cực kỳ không ổn. Nếu tính về phần giải thuật thì số lần lặp là lập phương, chả biết nói sao, tức là O(n3).
for () {
    for () {
    }
}
  • Hai for rời rạc là không nên
void blah() {

    // for 1, doing foo   
    for () {    
    }

    // for 2, doing bar
    for () { 
    }
}

Nên thay for(1) làm một hàm và for(2) làm một hàm khác. Lý do là mỗi vòng for đã thể hiện một công việc riêng biệt rồi.

  • Khi đó ta sẽ có
void blah() {
    foo();
    bar();
}

Code thế này rõ ràng hơn phiên bản cũ. Các bạn thấy sao?

Mr. July viết 19:08 ngày 30/09/2018

Em thấy như vậy là hợp lí, chúng ta code chú trọng vào tối ưu và rõ ràng, như vậy có thể coi là tối ưu được!

Thai Nguyen viết 19:13 ngày 30/09/2018

vậy mấy cái hàm sort có 2 vòng for thì bạn tách ra ntn? Vấn đề ở đây là bạn định nghĩa ntn là một công việc sẽ được thực thi trong một hàm, nếu để 2 vòng for mà vẫn có lý thì chả sao cả?

Nguyễn Minh Dũng viết 19:09 ngày 30/09/2018

Ý mình không phải là 2 vòng for lồng nhau là không được, ý mình là, một hàm không nên có hai vòng for tách biệt. Như mình đã lưu ý ở trên.

Nguyen Ca viết 18:59 ngày 30/09/2018

Ý anh Đạt đúng rồi, nên như vậy, nó liên quan đến refactor, có sách này “Refactoring: Improving the Design of Existing Code by Martin Fowler” thấy hay

Đạt Đỗ viết 19:14 ngày 30/09/2018

Vậy khó nhỏ, có bài bắt buột luôn thì sao ta?

Nguyễn Minh Dũng viết 19:00 ngày 30/09/2018

I moved a post to a new topic: Vòng for(; có nghĩa là gì?

Văn Dương viết 19:04 ngày 30/09/2018

Loang dầu dùng 2 vòng for tách nhau

Bài liên quan
0