Когда уместны защитные выражения?

Вот пример, который я написал, в котором используются ветки 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
6
задан ChaosPandion 16 August 2010 в 19:51
поделиться

2 ответа

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

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

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

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

11
ответ дан 8 December 2019 в 13:43
поделиться

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

6
ответ дан 8 December 2019 в 13:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: