保护表达何时适当?

Cha*_*ion 6 haskell idiomatic

这是我写的一个使用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
Run Code Online (Sandbox Code Playgroud)

Chu*_*uck 11

你给出的例子非常好地展示了警卫如何变得更好.

使用警卫,您可以获得一个非常简单易读的条件和结果列表 - 非常接近数学家如何编写函数.

if,而另一方面,则有一个稍微复杂的(基本上为O(n 2)读取困难)嵌套表达式与以不规则的间隔在抛出关键字结构.

对于简单的情况,它基本上是一个if和守卫之间的折腾 - if在一些非常简单的情况下甚至可能更具可读性,因为它更容易在一行上写.但是,对于更复杂的逻辑,守卫是表达相同想法的更好方法.


sab*_*uma 6

我一直以为这是一个偏好的问题.就我个人而言,我更喜欢第二种,我认为if-elses比守卫更有必要,我觉得卫兵更容易阅读.

  • 我真的很喜欢看守的方式. (2认同)