为什么我们在其他函数中调用函数作为参数?

时间:2013-05-31 16:22:52

标签: methods coding-style

我有一个风格问题。这是我一直以来一直在做的事情,但我无法弄明白为什么。

在我使用过的大多数语言中,你可以调用一个方法,将一个值作为参数返回给另一个方法:

foo(bar())

等于

var bar=bar()
foo(bar)

出于某种原因,后者似乎令人讨厌。这是为什么?首先是更易读,更有效还是更干净?

2 个答案:

答案 0 :(得分:1)

它不一定相等。

foo(bar());

表示“调用bar并将其参数传递给foo”

var retBar = bar();
foo(retBar);

表示“初始化retBar,然后调用bar,存储它返回到retBar的任何内容,然后使用retBar作为其argumnet调用foo。”

根据变量的声明成本,后者可能会有更大的内存占用或更慢的运行时间。

但实际上,这是一个完整的额外声明 - 实际上是两个额外的声明,具体取决于语言 - 并且它会使您的代码不那么干净。方法#2的唯一一次是当我有理由使用bar()的值时,即使只是在调试器中查看它。

答案 1 :(得分:0)

我觉得它融合了你所说的一切。之前的结构是有利的,因为

一个。它阻止声明一个额外的变量来实现相同的结果。

湾它更清洁,因为它更容易阅读/理解

var accountBalance = sum(principalAmount + calculateInterest())

大于

var varCalculateInterest = calculateInterest();

var accountBalance = sum(principalAmount + calculateInterest())

℃。如果你使用像递归这样的功能,你显然会尝试前者。您将需要许多临时变量来存储中间结果。请参阅下面的示例。

return concatenate(quicksort(less),pivot',quicksort(更大))