重函数调用嵌套的可读性?

dsi*_*cha 5 coding-style readability d

我经常看到它认为不应该使用重度嵌套的函数调用,因为它们是不可读的.但是,使用临时变量会产生大量不必要的冗长,并迫使读者在心理上将每个临时变量链接到它所代表的内容.在查看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);
Run Code Online (Sandbox Code Playgroud)

在嵌套函数形式中编写类似第一个示例的东西是,恕我直言,相当于在更多程序风格的代码中执行以下操作:

for(i = 0; i < 10; i++) { for(j = 0; j < 10; j++) { if(x < 2) { z++; } else { y++; }}}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,真正的问题是格式不佳,而不是过度嵌套.您如何评价格式良好的嵌套函数版本与临时变量版本的可读性/可理解性?您认为重函数调用嵌套是不好的样式,即使它的格式是为了最大可读性?如果是这样,为什么?

Den*_*cay 0

我个人认为如果没有性能损失可读性更重要。虽然我对 Lisp 语法一无所知,但看起来你的例子进行了相同数量的调用?如果是这样的话,请以可读的方式进行。但是,如果您在循环中多次调用繁重的函数(例如打开文件并一次又一次地读取),则应该避免使用它。我希望这个答案有用。