2010-08-16 3 views
6

Вот пример, который я написал, который использует if-else ветви и выражения защиты. Когда еще один подход к другому? Основная причина, по которой я хочу знать это, состоит в том, что языки обычно имеют идиоматический способ делать вещи.Когда подходящие выражения охраны?

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 

ответ

11

Пример, который вы даете, является очень хорошей демонстрацией того, как защитники лучше.

С охранниками у вас есть очень простой и понятный список условий и результатов - очень близко к тому, как функция будет написана математиком.

С if, с другой стороны, у вас есть несколько сложнее (в основном O (п) чтение сложности) структуры вложенных выражений с ключевыми словами, добавленными через неравные промежутки времени.

Для простых случаев это в основном тотализатор между if и защитой - if может быть даже более читабельным в некоторых очень простых случаях, потому что его проще писать на одной строке. Однако для более сложной логики охранники - это гораздо лучший способ выразить ту же идею.

+0

+1, за исключением того, что он прав, «трудности с чтением« O (n²) » – delnan

+0

@ delnan - Возможно, они думали *« шум шума O (n²) к соотношению «*» с «n» - количество условий. – ChaosPandion

6

Я всегда думал, что это вопрос предпочтения. Лично я предпочитаю второй, я думаю, что if-elses дают более настоятельное чувство, чем охранники, и я считаю, что охранников легче читать.

+2

Мне действительно нравится, как читают охранники. – ChaosPandion

Смежные вопросы