编码样式:函数调用内部语句

时间:2012-08-22 14:40:38

标签: php optimization coding-style

好的,首先,我怀疑这将会被关闭。

是的,我有一个与在语句中使用函数调用有关的问题,而不是首先分配给变量。

例如:

(代码在php中,但问题一般适用。此外,代码过于简化)

if (myAmazingFunction() === true) {
    // do something amazing
}

而不是

$amazingresult = myAmazingFuncton();
if ($amazingResult === true) {
    // do something amazing
}

问题是:

  1. 每种方法是否有任何表现或其他潜在的利弊
  2. 在风格上,任何方法都被认为比其他方法更好

3 个答案:

答案 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条件下正在测试的值。无需查找变量并搜索受影响的位置。