在以下两种方式中,人们不得不选择哪种方法。我个人对方法2感到满意,if-else
梯形图。但是我的朋友告诉他们,他们在编码中调用冗余。他曾经在许多单if
语句中实现这一点,比如...
示例:
if( cond1 && cond2 ){}
if(cond1 && cond3){}
if(cond3 && cond2){} etc..
Instead of.,
if(cond1)
{
}
else
{
if(cond3 && cond2)
{}
}
//Way 1
String str = cond1 && !cond2 && !cond3 ? "world" : "hello" ;
(cond1,cond2,cond3 -> aren't simple checks. say they itself contains many || and &&'s )
//Way 2
String str;
if (cond1)
{
if (cond2)
{
str = "hello";
}
else
{
if (cond3)
{
str = "hello";
}
else
{
str = "world";
}
}
}
答案 0 :(得分:2)
String str;
if (cond1 && cond2) {
str = "hello";
} else if(cond1 && cond3) {
str = "hello";
} else if(cond1) {
str = "world";
}
这种方法有点介于两者之间。我根本不是第一种方法的粉丝。但就个人而言,这种方法似乎比你的第二种方法更清晰,更具可读性,并且它做同样的事情。
这并不是说你应该避免嵌套if
语句。我只是建议您也可以随意使用复合if
语句。在我看来,if else
块的内容应该不仅仅是嵌套if
或if else
。如果if
块中没有任何内容不在nested if
块中,则您的语句可以使用复合if statements
重写。
我的第一种方法也有替代方法。
String str;
if(cond1) {
if(cond2) {
//do stuff
} else if(cond3) {
//do stuff
} else {
//do stuff
}
}
这只会检查cond1
一次。它仍然有一个纯粹嵌套的if
可以重写为compound
,但是如果你关注性能(如果cond1
是一个特别耗时的检查),这将检查{ {1}}只有一次,它比你原来提出的问题(在我看来)更具可读性。这种差异更加微妙。
还有这种方法。
cond1
在此方法中,您可以使用bool flag1 = cond1;
bool flag2 = cond2;
bool flag3 = cond3;
String str;
if (flag1 && flag2) {
str = "hello";
} else if(flag1 && flag3) {
str = "hello";
} else if(flag1) {
str = "world";
}
变量作为标志来生成简单和简短的复合条件语句。您可以根据需要多次检查任何条件(只要条件可能发生变化,您需要再次bool
等),而无需进行实际检查条件所需的全部计算。您只需检查一次并保存条件的结果。
答案 1 :(得分:0)
我见过许多不同类型的编码风格,而且从我发现的所有内容中,都取决于具体情况。除了不写不可读代码之外,没有通用标准。
您的同事可能需要特定的风格模式,因此您可以遵循这一模式。
对于经验丰富的程序员而言,两者都具有很强的可读性,可读性对于代码来说非常重要,特别是如果它将由其他人维护(这最终是不可避免的)。
这就是你的目标。如果你想要大if/else
个语句,我不确定是否有一个固有的原因,除了最终可能会产生不可读的代码,这取决于它是如何实现的。