好的,首先,我怀疑这将会被关闭。
是的,我有一个与在语句中使用函数调用有关的问题,而不是首先分配给变量。
例如:
(代码在php中,但问题一般适用。此外,代码过于简化)
if (myAmazingFunction() === true) {
// do something amazing
}
而不是
$amazingresult = myAmazingFuncton();
if ($amazingResult === true) {
// do something amazing
}
问题是:
答案 0 :(得分:2)
在大多数语言中,没有性能差异。在第一种情况下,编译器将在检查是否为true
之前为函数调用的结果分配存储。在第二种情况下,你只是简单地说明了这一点。
如果您正在调试,有时第二种形式更容易,因为您可以在第二行设置断点并在进行比较之前检查函数返回的值 - 但随后您将看到函数的结果在你给出的例子中,执行代码所采用的路径。正如扎克在评论中所说,你也可以在不重新运行功能的情况下重复使用该值。
在风格上,这将主要是主观的。我在这里唯一要说的是,如果您的变量名称使函数输出的目的变得清晰,那么您可能会添加一些内容,以便其他人轻松理解您的代码。
答案 1 :(得分:1)
@ DavidM的回答是正确的。但是,我只想在风格上添加它,我认为这取决于函数的名称及其上下文。
示例:
if ($food->tastesGood()) {
echo 'Mmmm!';
}
// vs.
$foodTastesGood = $food->tastesGood();
if ($foodTastesGood) {
echo 'Mmmm!';
}
在这种情况下,很明显方法tastesGood()
的返回值将是方法名称及其上下文的布尔值。使用临时变量不会为代码添加任何内容,除非使其冗余且一目了然不易读取。此外,如果变量未在其使用之前定义,那么您必须找到定义以了解条件。在这些情况下,我会说使用变量更糟糕。
另一个例子:
if ($dishes->wash() !== FALSE) {
echo 'Sparkly!';
}
// vs.
$dishesAreClean = $dishes->wash() !== FALSE;
if ($dishesAreClean) {
echo 'Sparkly!';
}
在这种情况下,我们无法从名称中真正推断出wash()
方法的返回类型,事实上,它似乎在成功时返回任何内容,并在错误上返回FALSE
。检查餐具是否干净,然后要求我们确保没有错误,但第一种情况并不是特别易读或自我记录的代码。然而,第二种情况通过临时变量添加了非常明确的信息。在这些情况下,我会说使用变量更好。
答案 2 :(得分:0)
每种方法是否有任何表现或其他潜在的利弊
在性能方面,分配一个只在if条件下使用的额外变量将使用额外的内存和一行无用的代码。所以它将使用更多的内存。它会引人注目吗?可能不是。
在风格上,任何方法都被视为不良
使用if
语句中的方法是完全有效的,我认为这是一种更好的方法,因为您可以阅读代码并准确查看if
条件下正在测试的值。无需查找变量并搜索受影响的位置。