我被告知,使用“if”语句是首选,因为代码更难调试,当使用“else if”时?这句话中有一点真相吗?
答案 0 :(得分:50)
我从未遇到调试'else if'语句的问题。我认为使用'else if'语句是干净的,并且它与程序员进行通信,阅读“else if”语句组是互斥的代码。
答案 1 :(得分:12)
if(...)
{
}
else if(...)
{
}
完全等同于:
if(...)
{
}
else
if(...)
{
}
以同样的方式:
if(...)
foo();
else
bar();
完全等同于:
if(...) foo();
else bar();
这是100%的风格,无论一个是否比另一个更具有可读性,都是基于您的编程文化,语言和陈述的复杂程度的总判断调用。
答案 2 :(得分:9)
如果/ If else语句没有出错代码,我会
答案 3 :(得分:8)
if
和else if
之间的差异与协调和独占连词之间的差异相同。
答案 4 :(得分:8)
也许你的老板只是意味着提前退货。
我经常不需要if / else
。但这并不是因为else
是错误的,而是因为我喜欢早期的回报,如果你使用早期的回报,那么你就不需要那么多了。
所以而不是:
boolean validate(DomainObject o) {
boolean valid = false;
if (o.property == x) {
valid = true;
} else if (o.property2 == y) {
valid = true;
} ...
return valid;
}
我更喜欢输入:
boolean validate(DomainObject o) {
if (o.property == x)
return true;
if (o.property2 == y)
return true;
return false;
}
答案 5 :(得分:3)
声明“否则如果更难调试”是荒谬的。我建议你将来不要求那个人帮忙。
使用语义正确的解决方案。如果解决方案是:
if a is true do a.action
if a is not true and b is true, then do b.action
otherwise do c.action
然后else if
是合适的。例如:
if (a == true)
{
// do a.action
}
else if (b == true)
{
// do b.action
}
else
{
// do c.action
}
如果解决方案是:
if a is true do a.action
if b is true do b.action
if c is true do c.action
然后else if
不合适。例如:
if (a == true)
{
// do a.action
}
if (b == true) // note that we don't care if a was true
{
// do b.action
}
if (c == true) // care about neither a nor b
{
// do c.action
}
答案 6 :(得分:2)
在正常使用中,else if
完全没有问题。事实上,我认为这是一种重要的编码技术。
唯一的时间else if
是一个问题,当你把它们加载到一起时 - 我不得不调试遗留代码,这些代码有几千行,包括if,elseif,elseif,elseif的页面......无限的。现在 是错误的代码。不要那样做。
这种情况可能会给你一个糟糕的经历,如果,但这只是糟糕的编码;如果没有别的话,你可以做得更好或更糟。
答案 7 :(得分:2)
我喜欢古老的说法“调试是编写代码的两倍,所以如果你把代码编写得很聪明,那么根据定义你就不够聪明来调试它”。所以我试着让我的代码易于阅读和阅读调试(有时这是不可能的)。话虽这么说,我不认为别的如果非常聪明,所以我会继续使用它。
答案 8 :(得分:1)
我认为这不是真的。 if,else if语句非常简单且易于调试。我想这可能取决于正在调试的人,但根据我的经验,没有任何一个区别,我没有听到有人在尖叫“如果!”在调试他的代码时。
答案 9 :(得分:0)
它实际上取决于大多数情况下要检查的条件,例如,如果您要检查成绩是否是某个字母,则可以使用多个if语句或if else if语句。确实没有区别,因为一个等级不能同时为A和C。
答案 10 :(得分:0)
使用一堆if
语句与使用if
然后使用else if
完全不同。
示例:
if(x>5)
{
color="blue";
}
if(x>10)
{
color="red";
}
在这种情况下,如果我们使用15作为x,则颜色将被red
覆盖。
但是,如果我们使用else if
if(x>5)
{
color="blue";
}
else if(x>10)
{
color="red";
}
在这种情况下,颜色会变为蓝色,因为我们会忽略秒语句,因为第一个语句已经为真。
答案 11 :(得分:0)
结论:条件代码应尽可能清晰/简单,以便在编程或调试阶段,人类可以轻松管理变量。
答案 12 :(得分:0)
我是一名首席程序员,有时我的下属会误解我。当我谈到具体案例时,他们多次将其视为“规则”并尝试在代码库中的任何地方强制执行。我不确定这是不是你的情况,或者你的老板曾经是我的下属?
关于这个问题,else if
对我来说很好,但是当它们没有太多时因为else if
强迫你阅读它们上面的所有表达式来实现内部代码将被执行。
答案 13 :(得分:0)
这取决于你想要完成的事情。两者都是可接受的编码形式,它只取决于你正在做什么。例如,如果要确保检查每个比较并运行所有代码的可能性,则应使用单数if
构造:
if(condition1IsTrue) {
methodThatMustRun1();
}
if(condition2IsTrue) {
methodThatMustRun2();
}
... etc
在此示例中,检查所有条件,并且可能会运行每个代码块。
如果您只想从多个选项中运行单个代码块,那么您应该使用if else
构造,最好以最常见的顺序发生,以便最不常见:
if(condition1IsTrue) {
mostCommonMethodToRun();
} else if (separateConditionToCheckInCaseFirstFails) {
nextMostCommonScenarioMethodToRun();
} else if (...) {
... etc
}
在第二个示例中,最多检查所有条件,但可能只检查一个。但是,只执行一个代码块(假设您没有条件评估为true时有默认操作)。
你的老板不一定像所有人都说的那样白痴,但你有可能误解了他的意图。当你考虑它时,所有条件代码本质上都是独立的块(第一个例子),由一些多选项代码组成(第二个例子)。
然而,如果他教条地说你不能用if else
构造进行编程,那么你的老板可能会是个白痴。
答案 14 :(得分:0)
'if语句'的形式是:
if (condidtion1)
statement1;
else
statement2;
声明的有效形式之一是“if声明”。让我们将'statement2'变成'if statement'if (condition2) statement3;
if (condition1)
statement1;
else if (condition2)
statement3;
白色空间和定位只是为了您的利益(可读性)。编译器本身对'else if'一无所知。
这表明'if'和'else if'虽然不是一回事。 'else if'是复合语句。
语句的另一个有效形式是括号{}中包含的语句块。这就是为什么你经常(通常)在'if语句'中看到括号。是否在单一陈述中使用它们只是风格问题。
使用'else if'的原因是你不必处理你知道会评估为false的'condition'表达式。你知道这是因为你已经检查了其他条件。
也许你的老板说你可能会在这些假设中犯错,而'如果'陈述可能会隐藏微妙的错误。我想这肯定是可能的。不过,这对我来说似乎不值一提。
他对'转换声明'有什么看法?
答案 15 :(得分:0)
无论你编写什么,你都应该想到语言语法可以用来提高代码的可读性,并向你的同事说明这些代码行背后的想法。
所以...明智地选择任何一种方式。滥用的一个例子是在其他代码块中吸收许多if
块。这可能会使代码难以理解且无法维护。
也许你的老板说,因为他不能。
答案 16 :(得分:0)
这比以下好多了:
if (a=1) then {
DoThis;
EXIT; // Not sure if this works in your language, but you know what I mean...
}
if (a=2) then {
DoThis;
EXIT;
}
if (a=3) then {
DoThis;
EXIT;
}
答案 17 :(得分:0)
您正在比较
if (a=b) do this;
if (a=c) do this;
if (a=d) do this;
要:
if (a=b) do this;
else if (a=c) do this;
else if (a=d) do this;
1)第一个示例更难调试,因为您没有像第二个示例所提供的代码的自然工作流程。
2)正如杰森指出的那样,第一个例子的表现与第二个例子不同,因为所有三个if语句都将被测试,无论如何,而第二个例子将在它变为真时停止测试。
tl;博士:你的老板错了,尽管他也有互联网接入。
答案 18 :(得分:0)
为什么不尝试使用代码中的ifs替换所有其他ifs?它会编译,但如果你幸运的话它只会按照你的需要执行......
它只是不一样,并且有一个理由为什么有If和为什么有Else IF。
例如:
if(3<5) {
print('blah');
} else if(4<5) {
print('blub');
}
// blah
if(3<5) {
print('blah');
}
if(4<5) {
print('blub');
}
// blahblub
我个人更喜欢橘子!苹果是如此olschool ... 我认为香蕉也很好(但这会不时切换!)
还有switch语句。
那些控制结构都做了不同的事情并且不是多余的,这就是为什么它们都在那里。 并且你不能说它无关紧要,它也不是风格或更好的可读代码或其他东西。
我甚至会说每个用例都有一个最佳控制结构可供使用!
考虑一下这些例子:
if(money > 2000) {
switch ($what-car-does-my-wife-want) {
case "ferrari":
echo "buying a ferrari";
break;
case "chevvy":
echo "buying a chevvy";
break;
case "bmw":
echo "buying a bmw";
break;
}
} else {
echo "i better not buy a new car";
}
if(money > 5000) {
echo "wow i can buy a lot of other things too!";
} else if(3000) {
echo "wow that is a lot of money but i wish i had 5000!";
}
你唯一可以做的就是风格问题正在取代
if(money > 5000) {
echo "wow i can buy a lot of other things too!";
} else if(money > 3000) {
echo "wow that is a lot of money but i wish i had 5000!";
}
通过
if(money > 5000) {
echo "wow i can buy a lot of other things too!";
} else {
if(money > 3000) {
echo "wow that is a lot of money but i wish i had 5000!";
}
}
但我认为那不是你问的吗?
答案 19 :(得分:0)
两种形式都需要相同的调试工作。我敢说“else if”语句实际上使调试变得更容易......
此外,“else if if”语句会提高性能,因为您的程序不必检查实际上相互排斥的条件!
答案 20 :(得分:0)
我也不同意。对于“其他如果”,没有什么本质上更难的;是否正确的编程方法取决于每个应用程序。在某些情况下,“switch”或“case”语句更好,但同样取决于应用程序。
在我看来,制定这样的硬性规则太有限了。
答案 21 :(得分:0)
如果“else if”是非首选构造,那么为什么几乎每种现代语言都提供它呢?我觉得你继续使用其他ifs就好了......除此之外 - 当它击中组装时,无论如何它都是跳/ goto;)