Multiple else if conditions, end with an other “else if” or “else” when logic dictates the last “else”-part dictates only one possibility?
有时,由于您的
1 2 3 4 5 6 7 | if(x<0){ //statements }else if(x==0){ //statements }else if(x>0){ //statements } |
或与其他
1 2 3 4 5 6 7 | if(x<0){ //statements }else if(x==0){ //statements }else{ //statements } |
在爪哇中,如果在最后一个
1 2 3 4 5 6 7 8 9 10 11 12 |
这会给你一个错误。原因是编译器认为,如果
因此,最好不要包括最后一个条件。将最后一个
这是Java的一个特性,因为它具有"明确的赋值"规则。该代码在大多数其他语言中都可以正常工作。
在您的情况下,您已经定义了,可以不考虑它,因为只有3种可能性。那就是
1 | x==0 or x<0 or x>0 |
考虑到一个场景,当最后一个漏洞被打开时,它会为一个漏洞大喊大叫,因为如果所有的if&else if都失败了,它将进入最后一个else,因为它没有界限。
最后一种方法是正确的,因为如果它不是
另一方面,您也可以考虑使用switch语句
1 2 3 4 5 6 7 8 9 10 11 12 13 | int x = 3; switch(x) { case 1: x < 0; //something; break; case 2: x == 0; //something; break; case 3: x > 0; //something; break; default: break; } |
在您的案例中,将最后一个if进行比较是不理想的,就像前2个if语句不正确一样,那么第三个if语句必须是正确的。所以只保留其他的就可以了。
不过,三元运算符是我个人的选择。
1 | (x>0) ? //statements : (x==0) ? //statements : //statements |
基本上是读
1 2 3 | if( x>0) then statements else if(x==0) then statements else statements |
关于三元运算符或if语句的更多信息
比那还要糟。有些语言甚至不允许空块。在bash中,在某些情况下,可以对空语句使用冒号(":")。在python中,你可以说"通过"。
这里,我们甚至不考虑一个一语句块的强制包围问题。
我认为代码的清晰性非常重要,编译器在优化条件方面非常聪明。
如果有人能证明一个额外的测试总是失败的,并且它是在每秒执行十亿次的代码中,那么…也许那时。
否则,如果一定要漏掉其他的,你可能会对可能会添加其他"elseifs"的效果发表评论。