最近,我一直在花一些空闲时间来尝试将注意力集中在 Haskell 和一般的函数式编程上。我的主要疑虑之一是(并且仍然是)我认为简洁的函数式表达式(无论是在 Haskell 还是任何其他语言中)的不可读性。
这是一个例子。我刚刚在一些工作代码中进行了以下转换:
def scrabble_score(word, scoretable):
score = 0
for letter in word:
if letter in scoretable:
score += scoretable[letter]
return score
至
def scrabble_score(word, scoretable):
return sum([scoretable.get(x, 0) for x in word])
后者写起来更令人满意(而且,请记住,我自己就是写它的人,读起来也是如此)。它更短更甜,并且没有声明任何讨厌的变量,如果我在输入代码时犯了任何错误,这些变量可能会令人头疼。(顺便说一句,我意识到我可以get()
在命令式函数中使用 dict 的方法,但我在执行此转换时意识到了这一点,所以我在示例中保留了它。)
我的问题是:尽管如此,后一个版本的代码真的比前一个版本更具可读性吗?与以前的版本相比,它似乎是一个更单一的表达方式,必须一次全部理解,在以前的版本中,你有机会从更小、更原子的片段中构建块的含义。这个问题来自于我对试图解码所谓易于理解的 Haskell 函数的挫败感,以及我作为一年级 CS 学生的助教坚持认为我们编写代码的主要原因之一(经常被忽视)是为了交流与其他程序员/计算机科学家的想法。我很紧张,简洁的风格带有只写代码的味道,因此违背了交流和理解代码的目的。