在一种情况下,一个变量可能有两个不同的值,如果是一个,你就做一些事情,如果是另一个,你就做一些不同的事情,你会这样做:

if(myVariable == FIRST_POSSIBLE_VALUE) { ... }
else { ... }

或者你会这样做:

if(myVariable == FIRST_POSSIBLE_VALUE) { ... }
else if (myVariable == SECOND_POSSIBLE_VALUE) { ... }

为了清楚起见,在读者不一定能够说出他们做了同样的事情的情况下(但 else if 是“不必要的”表达式)?那么你会怎么做?谢谢!

编辑:实际上,对于这样的事情还有更多不同的选择:三元运算符、if-else、if-elseif、if-elseif-else、-if-else(带断言)、开关。每个人都有自己的位置,但很难决定。

有帮助吗?

解决方案

这不是啥吗 assert 是为了什么?

if (condition1) { ... }
else { assert(condition2); }

这也可以扩展到三态逻辑。

if (condition1) { ... }
elsif (condition2) { ... }
else { assert(condition3); }

使用 assert 使您的代码可读、易于维护且清晰。话虽如此, asserts 和注释几乎可以互换。

其他提示

我总是喜欢只是普通否则当有可变的任何其他可能的状态(即,检查空和所有)。我可以添加评论说变量是什么,如果它不是第一个条件,但这只是在情况下,它像

if(color==red){
....
}else{ //our theme only allows for red and yellow, so the color must be yellow.
....
}

此外,这可以节省一些时间处理器的原因,而是将不具有检查一个无用变量(或在OOP,其中检查变量可以取相当多的解引用,函数调用差,和存储器读取)

我从来没有做这样的事情。

if(file.is_open==1){
....
}else if(file.is_open==0){
....

}

作为IS_OPEN是一个布尔值,它是没有意义的规定,因为唯一的选择是0,还这样可以节省打字一点点的时候,你必须重构代码使用IS_OPEN()来代替,因为现在你只需改变,而不是两个一行。

和“否则,如果”语句我认为应该转向开关如果有多于1“否则如果”,当然,除非语言使得不可能(如如何C不能在开关处理字符串)

否则是一个缺省值。这意味着有任一大量的数据的可能性,或者说,它是意想不到的内容

我去的基本规则:如果是可以得到满足,如果使用别的,一个参数,如果没有,用别的。我通常使用别人的错误。

我只用的if-else布尔检查,这意味着,如果该表达式不匹配有仅可以是其他。或者我要采取一切与else:把它想默认

如果您要检查枚举类的东西,你应该尝试通过switch语句检查这个,如果可能的话在你的语言。

在爪哇它不可能用于字符串的开关。所以,你可以使用这样的:

if(string.equals("foo")) {
    // first case
} else if(string.equals("bar")) {
    // second case
} else {
    throw IllegalArgumentException(" ... ");
    // or log it
}

如果你不知道你的支票不能扩展,你应该如果你能提供一个默认的方式。

有时else语句的条件是非常明显的。例如

if(user.IsNew) { } else { /*in this case user.IsNew != true*/ }

但在其他一些情况下的其他人不是很明显,这是更好澄清else条件。这是在情况下增加了一些其他可能的条件也更加面向未来。

此外,您还能够插入(最后)例外别的告知未实现的情况下。当例如后端和前端是分开的,这是非常有用的,有人增加了一个新的价值,以枚举(或使用文本键一个新的密钥被引入时),您将收到一个错误,当第一次使用新的价值。当不使用的if else,如果你不会看到发生了什么,可能使调试相当困难的。

if(user.SelectedStyle == Styles.Red) {
} else if(user.SelectedStyle == Styles.Basic) {
} else {
 throw new Exception("Not implemented");
}

在上面的一个新的风格(例如Style.Blue)的情况下会导致应用程序抛出异常。

这真是一个风格问题和世界的你自己的心理视图。玻璃是两个半空,半满的,但你可以得到可恨的论据去了。

如果布尔测试都是相同类型的,switch语句是最好的。

如果没有,我建议留出额外的测试,但插入约下降穿进这一句的操作意义的注释。见Gertjan的评论,以上。

当您输入可以清楚地分成不同的情况,我觉得它主要是更好的明确说明是什么的情况下是,例如,如果你期望“N”为0和100之间的数字,你有3个例:

if (n >= 0 && n < 30) {
   case1();
} else if (n >=30 && n < 70) {
   case2();
} else if (n >=70 && n < 100) {
   case3();
}

在某些情况下,“其他”的情况下是良好的错误检查

} else {
   error("n should be between 0 and 100");
}

如果数据检查早期错误的值,则有可能是使用别的用于最终情况下,为了提供在语言小的性能改善的情况下,像C:

} else { // (n >= 70 && n < 100)
   case3();
}

但是这仅仅是必要的,因为某些语言无法表达一个函数的定义域,在语言,其中域可以表达清楚,优化器应该添加此性能优势,为你,让你具体在你的代码,并使其更容易添加更多的情况下稍后

...当然,这是一门艺术,而不是一门科学,而且在某些情况下,你就不能按照硬遵守的规则,我经常发现自己写如下代码:

if (p == NULL) {
   doSomething();
} else {
   doSomethingElse();
}

...的事实,如果条件是做什么用的人对这一从第一很明显的和隐含的理由。

else被发明并用于很好的理由。当你使用它应该是你想实现的,风格不做作感的逻辑来决定。

一些人认为它是更自我记录通过使用在else if明确的条件;然而,这可能会导致在逻辑与默认间隙或捕获所有的条件。

此外,有人说,它更容易在未来修改。这种说法是无稽之谈。使用设计模式和编写模块化代码的东西是比较容易在未来修改,写一个行应不符合这些类型的语句。

这取决于具体情况。你只需要采取行动,如果某些条件得到满足,或者是有一个值的特殊情况和任何其他值另一套逻辑的?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top