Когда уместны защитные выражения? - PullRequest
6 голосов
/ 16 августа 2010

Вот пример, который я написал, который использует 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

Ответы [ 2 ]

11 голосов
/ 16 августа 2010

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

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

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

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

6 голосов
/ 16 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...