2012-08-22 37 views
2

好吧,首先,我怀疑这将被关闭。编码风格:函数调用内部声明

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

例如:

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

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

代替

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

的问题是:

  1. 是否有任何性能或其他潜在的优点或缺点每个方法
  2. 风格上,任何被认为比其他
+4

如果检查'true'总是使用'==='是1经验法则! – Zac

+0

两者均有效;只听@Zac。比较布尔值时使用'==='(除非你只想要'truthy'或'false-y',在这种情况下'=='很好)。 – Matt

+0

如果以后不需要它,则不需要将结果保存在变量中;-))。这两个版本都是完全合法的:-) – thedom

回答

2

更好的在大多数语言中的方法的,不会有任何性能差异。在第一种情况下,编译器会先检查函数调用的结果是否为true。在第二种情况下,你只是简单地说明这一点。

如果您正在调试,有时第二种形式更容易,因为您可以在第二行上设置一个断点并在进行比较之前检查该函数返回的值 - 但是然后您会看到该函数的结果在你给出的例子中执行代码的路径。 Zac在评论中表示,您也可以重新使用该值,而不必重新运行该功能。

从文体上讲,这将主要是主观的。我在这里要说的唯一的事情是,如果你的变量名称使得函数输出的目的清晰,那么你可能会添加一些东西来让其他人很容易理解你的代码。

+1

+1,因为你的回答比我的快8秒 – Tchoupi

+0

键盘吸烟...... –

+0

这就是她说的... – Tchoupi

0

是否有任何性能或其他潜在的优点或缺点每个方法

性能方面,分配一个额外的变量,你将在你的if条件将使用额外的内存只用了,一个无用线的代码。所以它会使用更多的内存。它会显着吗?可能不会。

风格上,是任何你if声明认为是不好的

使用方法的方法是非常有效的,而且我认为这是一个更好的办法,因为你可以阅读代码,看看值是什么正在测试if条件。无需查找变量并搜索它受到影响的位置。

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没事就错误。检查盘子是否干净,然后要求我们确保没有错误,但第一种情况并不能提供特别可读或自动记录的代码。然而,第二种情况通过临时变量增加了非常明确的信息。在这些情况下,我会说使用变量更好。