函数式编程是否需要新的命名约定?

2024-05-06

我最近开始使用 Haskell 学习函数式编程,并在 Haskell 官方 wiki 上发现了这篇文章:如何阅读哈斯克尔 http://www.haskell.org/haskellwiki/How_to_read_Haskell#What_the_heck_is_xyz.3F.

该文章声称短变量名,例如x, xs, and f由于简洁和抽象,适合 Haskell 代码。从本质上讲,它声称函数式编程是一种独特的范式,因此其他范式的命名约定不适用。

您对此有何看法?


在函数式编程范式中,人们通常不仅构建抽象top-down, 但是也自下而上 http://www.paulgraham.com/progbot.html。这意味着您基本上增强了宿主语言。在这种情况下,我认为简洁的命名是合适的。 Haskell 语言已经简洁且富有表现力,所以您应该习惯它。

然而,当尝试对某个域进行建模时,我不认为简洁的名称是好的,即使函数体很小。领域知识应该体现在命名中。

只是我的观点。

回应你的评论

我将从中获取两个代码片段现实世界哈斯克尔 http://www.realworldhaskell.org/blog/,都来自第3章 http://book.realworldhaskell.org/read/defining-types-streamlining-functions.html.

在名为“更可控的方法 http://book.realworldhaskell.org/read/defining-types-streamlining-functions.html#deftypes.morecontrolled”,作者提出了一个返回列表第二个元素的函数。他们的最终版本是这样的:

tidySecond :: [a] -> Maybe a
tidySecond (_:x:_) = Just x
tidySecond _       = Nothing

由于类型参数,该函数足够通用a事实上,我们正在对内置类型进行操作,因此我们并不真正关心第二个元素实际上是什么。我相信x在这种情况下就足够了。就像一个小数学方程一样。

另一方面,在名为“引入局部变量 http://book.realworldhaskell.org/read/defining-types-streamlining-functions.html#deftypes.locals”,他们正在编写一个示例函数,尝试对银行领域的一小部分进行建模:

lend amount balance = let reserve    = 100
                          newBalance = balance - amount
                      in if balance < reserve
                         then Nothing
                         else Just newBalance

当然不建议在这里使用短变量名。我们实际上确实关心这些金额代表什么。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数式编程是否需要新的命名约定? 的相关文章