2010-05-26 19 views
7

Một đồng nghiệp của tôi và tôi đã thảo luận về vấn đề thực hành tốt nhất sau đây.
Hầu hết các chức năng/phương pháp đều bắt đầu bằng một số kiểm tra tham số.Phong cách nếu: làm tổ hay không làm tổ

Tôi ủng hộ phong cách sau, tránh làm tổ.

if (parameter one is ugly) return ERROR; 
if (parameter two is nonsense || it is raining) return ERROR; 
// do the useful stuff 
return result; 

Anh ấy đến từ nền lập trình hàm/logic hơn, thích điều sau, vì nó làm giảm số điểm thoát khỏi hàm.

if (parameter one is ok) { 
    if (parameter two is ok && the sun is shining) { 
     // do the useful stuff 
     return result 
    } 
} 
return ERROR; 

Bạn thích cái nào và tại sao?

+3

Việc sử dụng của điều khoản bảo vệ là để được tư vấn. Kiểm tra quy tắc tái cấu trúc Fowlers: http://www.refactoring.com/catalog/replaceNestedConditionalWithGuardClauses.html - nó biến đổi thứ hai của bạn (lồng nhau) thành đầu tiên (mệnh đề bảo vệ). – Konerak

Trả lời

0

Điều thứ hai tôi muốn thường là, trừ khi toàn bộ nội dung chức năng sẽ được bao bọc trong số X của câu hỏi if. Nếu vậy, tôi sẽ chọn tùy chọn đầu tiên.

5

Miễn là phong cách nhất quán trên cơ sở mã, bất kỳ kiểu nào trong hai kiểu này cũng sẽ ổn với tôi.

0

Tôi thích mục đầu tiên. 5298529357 mức độ thụt lề chỉ làm tôi lo lắng.

Thêm vào thực tế là khi bạn quay trở lại ngay lập tức, rõ ràng là (tham số một là xấu xí) là một lỗi.

1

Tôi muốn thực hiện tất cả xác thực thông số đầu vào của mình ở đầu hàm và chỉ thực hiện return. Do đó tôi thích cách tiếp cận đầu tiên hầu hết thời gian. Nếu chỉ có một cấp độ làm tổ thì tôi có thể chọn tùy chọn thứ hai.

12

Cá nhân tôi thích phong cách đầu tiên, vì tôi cảm thấy rằng nó cung cấp sự tách biệt hợp lý giữa những gì chúng ta có thể gọi là "trường hợp lỗi" và "logic phương pháp". Có một khối được xác định rõ trong phần đầu của phương thức đánh giá và hoạt động trên bất kỳ lỗi nào trong đầu vào, và sau đó phần còn lại của phương thức là tất cả những gì mà phương thức thực sự nên thực hiện.

Đó là một số loại mối quan tâm về mức độ vi mô, tôi đoán vậy.

0

Phong cách dễ đọc nhất là:

if (parameter one is ok) 
{ 
    if (parameter two is ok && the sun is shining) 
    { 
     // do the useful stuff 
     return result 
    } 
    else 
    { 
     // do other things 
    } 
} 
return ERROR; 

Ít nhất đối với tôi :)

EDIT: Xin lỗi, hiểu lầm câu hỏi. Tôi bầu cho người đầu tiên, không thích làm tổ sâu.

2

Trong trường hợp của hai kiểm tra thì một trong hai là ok thực sự, một khi bạn thêm nhiều hơn, tùy chọn 1 nhanh chóng trở nên ngày càng nhiều mong muốn!

0

Theo ý kiến ​​của tôi, nó chỉ phụ thuộc vào loại kiểm tra lỗi bạn cần.
Nếu ví dụ tham số một là ugly nhưng trong mã sau bạn có thể quản lý để thay đổi trạng thái của nó thành pretty phương pháp thứ hai là thích hợp hơn.
Tuy nhiên nếu lỗi là gây tử vong và không thể xử lý được, bạn nên quay lại ngay lập tức.
Có tùy chọn thứ ba ở đây, nơi kiểu thứ hai phù hợp nhất và đó là khi bạn muốn thu thập tất cả các lỗi thành một thông báo lỗi nhất quán.
Kiểu thứ hai không nên kiểm tra tính hợp lệ nhưng trước hết không hợp lệ.
Đối với sở thích cá nhân, tôi sẽ hạnh phúc hơn nhiều với phong cách đầu tiên.

0

của chúng tôi trong nhà theo phong cách là để tránh nhiều return điểm và cũng để hạn chế số lượng làm tổ, vì vậy tôi có lẽ muốn kết hợp của bạn tỉnh táo trước tình trạng kiểm tra lại với nhau và làm điều gì đó như:

result_t result = OKAY;  

// Sanity checks 
if ((parameter_one == ugly) || (parameter_two == nonsense) || (weather == raining)) 
{ 
    result = ERROR; 
} 
else 
{ 
    // do the useful stuff 
} 

return result;