什么时候守卫表情适当?

这是我写的一个使用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

你给的例子是警卫如何更好的一个很好的示范。

有了警卫,你有一个非常简单和可读的条件和结果列表 - 非常接近数学家如何写这个函数。

随着if ,在另一方面,你有一个比较复杂的(基本上是O(n2)的读取困难)嵌套表达式与不定期抛出的关键字结构。

对于简单的情况,它基本上是if和guard之间的折腾 - if在一些非常简单的情况下甚至可以更易读,因为在单行上写更容易。 然而,对于更复杂的逻辑来说,警卫是表达同样想法的更好方式。


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

链接地址: http://www.djcxy.com/p/43257.html

上一篇: When are guard expressions appropriate?

下一篇: XIncoherentInstances doesn't work