我经常看到它认为不应该使用重度嵌套的函数调用,因为它们不可读。然而,使用临时变量反而会产生很多不必要的冗长,并迫使读者在心理上将每个临时变量与其所代表的内容联系起来。在查看 Lisp 代码通常格式化的方式时,我突然想到,如果您格式化它们以反映嵌套,嵌套函数调用实际上可以变得非常可读。例如:
// Totally unreadable:
auto linesIter = filter!"a.length > 0"(map!strip(File(filename).byLine())))
// Perfectly readable. The only difference is formatting.
auto linesIter = filter!"a.length > 0"(
map!strip(
File(filename).byLine()
)
);
// Readable, but unnecessarily verbose:
auto rawLines = File(filename).byLine();
auto stripped = map!strip(rawLines);
auto filtered = filter!"a.length > 0"(stripped);
以嵌套函数形式编写类似于第一个示例的内容,恕我直言,相当于在更多过程式代码中执行以下操作:
for(i = 0; i < 10; i++) { for(j = 0; j < 10; j++) { if(x < 2) { z++; } else { y++; }}}
在这两种情况下,真正的问题是格式不正确,而不是过度嵌套。您如何评价格式良好的嵌套函数版本与临时变量版本的可读性/可理解性?你是否认为繁重的函数调用嵌套是不好的风格,即使它被格式化以获得最大的可读性?如果是这样,为什么?