【问题标题】:Why do we call functions as arguments in other functions? [duplicate]为什么我们在其他函数中将函数称为参数? [复制]
【发布时间】:2013-05-31 16:22:51
【问题描述】:

我有一个风格问题。这是我一直以来一直在做的事情,但我不知道究竟是为什么。

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

foo(bar())

等于

var bar=bar()
foo(bar)

出于某种原因,后者似乎令人讨厌。这是为什么?第一个更易读、更高效还是更简洁?

【问题讨论】:

  • 抱歉重复了。我尝试了一些搜索以查看是否已经存在某些东西,但显然看起来不够仔细。 :[

标签: methods coding-style


【解决方案1】:

不一定相等。

foo(bar());

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

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

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

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

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

【讨论】:

  • 我喜欢最后一点——保留引用可以让你在调试时中断。
【解决方案2】:

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

一个。它阻止声明一个额外的变量来达到同样的结果。

b.它更干净,因为它更容易阅读/理解

var accountBalance = sum ( principalAmount + calculateInterest() )

var varCalculateInterest = calculateInterest();

var accountBalance = sum ( principalAmount + calculateInterest() )

c。如果您使用递归等功能,您显然会尝试前者。您将需要大量临时变量来存储中间结果。请看下面的例子。

return concatenate(quicksort(less), pivot', quicksort(greater))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 2021-11-23
    • 2019-04-18
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    相关资源
    最近更新 更多