这是我写的一个使用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
答案 0 :(得分:11)
您给出的示例非常好地展示了警卫如何更好。
使用警卫,你有一个非常简单易读的条件和结果列表 - 非常接近数学家如何编写函数。
另一方面,对于if
,你有一个有点复杂的(基本上是O(n 2 )读取难度)嵌套表达式的结构,其中关键字以不规则的间隔抛出。 / p>
对于简单的情况,它基本上是if
和守卫之间的折腾 - if
在一些非常简单的情况下甚至可能更具可读性,因为它更容易在一行上书写。但是,对于更复杂的逻辑,守卫是表达相同想法的更好方式。
答案 1 :(得分:6)
我一直认为这是一个偏好问题。就个人而言,我更喜欢第二种,我认为if-elses比守卫更有必要的感觉,而且我发现卫兵更容易阅读。