很久以前,一位教授告诉我,当“链接”系列中的多个条件时,我会使用else
(我还在学习)。既然我多年后一直在修改几个框架和CMS,我发现我教的内容并不是那么有趣。
我被教导在一系列条件之间使用else
:
function double(param){
if(param==1){
return param+=1;
}
else
if(param==2){
return param+=2;
}
else{
return false;
}
}
如今,我似乎看到了这一点,我很久以前就被警告不要这样做:
function double(param){
if(param==1){
return param+=1;
}
if(param==2){
return param+=2;
}
return false;
}
此示例代码可能不起作用,但想法是:是否有必要在每个条件之间使用else
?如果是这样(或不是这样),我应该看什么什么时候使用?肯定会有一些东西让我的教授告诉我这件事。
答案 0 :(得分:4)
使用else
或不使用它意味着两件事。
如果您希望测试最多的一系列条件,则可以使用else
或else if
。当一个条件的计算结果为true时,将执行块中的代码,然后退出整个if-else结构。
当多个条件可能属实时,使用else
将排除其他条件从评估变为true,因此在此使用else
是错误的情况。
编辑:我现在看到你指的是每个子句包含一个return语句的特定情况。在这种情况下,最好使用else
或elseif
来明确if-else构造以第一种方式运行 - 即。最多可以执行一个条件。
答案 1 :(得分:2)
没有必要使用else,因为控制流会立即从函数返回return关键字。
此外,当发现不必要的回复时,我发现使用了else,因此在所有情况下都更喜欢替代2。
答案 2 :(得分:2)
这只是一个意见问题。
在这种情况下没有必要使用else
,但是你的教授可能一直在描述一个不同的案例,或者他可能只是为了强调/强制清晰而让你这样做。
首先,我认为从同一个函数返回不同的数据类型通常是不好的风格,但是说了这个,举个例子:
function double($param) {
if ($param == 1) {
return $param + 1;
} else if ($param == 2) {
return $param + 1;
} else {
return false;
}
}
现在想象一个类似的例子,除了它不会每次都返回:
function double($param) {
$returnMe = 0;
if ($param == 1) {
$returnMe = $param + 1
} else if ($param == 2) {
$returnMe = $param + 2;
} else {
$returnMe = false;
}
return $returnMe;
}
这可能看似微不足道(并且在很大程度上提供的示例中),您可以看到其他人确实会产生影响。
在迫使一切都像他一样拥有其他东西时,他可能只是想提供一些风格的一致性(我认为这对新手来说是好的)。
当然,你是对的,在你提出的情况下,别的没有必要。无论它是坏还是好都只是一个意见问题。
答案 3 :(得分:1)
if ($one) {
doA();
}
if ($two) { // ALWAYS check this block - it is not attached to anything
doB();
}
Truth table:
| $one True | $one False
------------+-----------+------------
$two True | A and B | B only
$two False | A only | none
if ($one) {
doA();
}
else if ($two) { // ONLY check this block if $one is false!
doB();
}
Truth table:
| $one True | $one False
------------+-----------+------------
$two True | A only | B only
$two False | A only | none
正如您在真值表中看到的那样,这两种情况并不相同。因此,是否使用if..else
或if..if
不仅仅是语义或品味的问题,它还具有实际的功能差异。
如果if
内的返回,它将完全退出该功能,因此这是 结果的特殊情况与else-if
相同。
答案 4 :(得分:0)
我认为这是一个很好的做法,因为如果你忘记return
条款(导致难以发现的错误),流程就会跟进。
无论如何,在某些情况下,else子句可能过于冗长,因此您可以使用elseif
:
<?php
if ($a > $b) {
return "a is bigger than b";
} elseif ($a == $b) {
return "a is equal to b";
} else {
return "a is smaller than b";
}
?>
答案 5 :(得分:0)
是即可。为什么?因为这些条件基于相同的变量,只能满足一个。因此,如果您使用elseif
(PHP)或else if
(JavaScript),则可以提高代码可见性并避免将来出现错误。
PHP中的代码如下所示:
function double($param){
if($param==1){
return $param+=1;
}
elseif($param==2){
return $param+=2;
}
else{
return false;
}
}
或使用switch
对应方:
function double($param){
switch ($param) {
case 1:
return $param+=1;
case 2:
return $param+=2;
default:
return false;
}
}
在JavaScript中它看起来像这样:
function double($param){
if($param==1){
return $param+=1;
}
else if($param==2){
return $param+=2;
}
else{
return false;
}
}
答案 6 :(得分:0)
这实际上取决于你的代码流程...... 有时你需要使用单独的if(s),有时你需要使用if(s)和else(s)...... 但是为了你添加的例子。就个人而言,我会选择您编写的第一个,因为它更有效,更易于阅读和理解。也许还有其他因素和要点,但这就是我看到它的原因,这也是我选择第一个因素的原因。
要添加的另一件事是,如果您使用第二个,编译器将始终执行第二个“if”,如果$ param包含不同于“1”或“2”的其他值。
答案 7 :(得分:0)
您可能想象我不久前在Apple网站上发现的这种情况
switch(true) {
case foo == bar:
break;
case foo > 5:
break;
case foo > 10:
case bar > 5:
break;
}
你明白了。我相信所有编译器都会将其分解为if / else代码,但我喜欢 灵活性控制break语句的位置。