2010-08-16 29 views
6

Dưới đây là ví dụ tôi đã viết sử dụng các chi tiết và biểu thức bảo vệ if-else. Khi nào thì thích hợp hơn cái kia? Lý do chính tôi muốn biết điều này là bởi vì ngôn ngữ thường có cách làm việc thành ngữ.Khi nào các biểu thức bảo vệ phù hợp?

test1 a b = 
    if mod b 3 ≡ 0 then a + b 
    else if mod b 5 ≡ 0 then a + b 
    else a 

test2 a b 
    | mod b 3 ≡ 0 = a + b 
    | mod b 5 ≡ 0 = a + b 
    | otherwise = a 

Trả lời

11

Ví dụ bạn đưa ra là minh chứng rất tốt về cách bảo vệ tốt hơn.

Với các vệ sĩ, bạn có một danh sách rất đơn giản và dễ đọc về điều kiện và kết quả - rất gần với cách chức năng sẽ được viết bởi một nhà toán học.

Mặt khác, bạn có một cấu trúc phức tạp (về cơ bản là cấu trúc của các biểu thức lồng nhau với từ khóa được ném vào trong khoảng thời gian không thường xuyên) (if).

Đối với trường hợp đơn giản, nó là cơ bản một toss-up giữa if và bảo vệ - if thậm chí có thể dễ đọc hơn trong một số trường hợp rất đơn giản bởi vì nó dễ dàng hơn để viết trên một dòng đơn. Tuy nhiên, đối với logic phức tạp hơn, các vệ sĩ là cách tốt hơn để thể hiện cùng một ý tưởng.

+0

+1 cho, ngoài việc phải, "O (n²) đọc khó khăn" – delnan

+0

@delnan - Có thể họ đang nghĩ * "O (n²) tín hiệu nhiễu theo tỷ lệ" * với 'n' là số điều kiện. – ChaosPandion

6

Tôi luôn nghĩ đó là vấn đề ưu tiên. Cá nhân, tôi thích cái thứ hai, tôi nghĩ rằng nếu các elses cung cấp cho một cảm giác bắt buộc hơn so với các vệ sĩ, và tôi thấy các vệ sĩ dễ đọc hơn.

+2

Tôi thực sự thích cách người bảo vệ đọc. – ChaosPandion

Các vấn đề liên quan