-4

在以下 2 种方法中,必须选择哪种方法。if-else我个人对方法2,梯子一感到满意。但是我的朋友告诉我,他们在编码中调用了冗余。他过去常常在许多单一的语句中实现这一点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";
                    }
                }
            }
4

2 回答 2

2
String str;
if (cond1 && cond2) {
    str = "hello";
} else if(cond1 && cond3) {
    str = "hello";
} else if(cond1) {
    str = "world";
}

这种方法有点介于两者之间。我根本不喜欢第一种方法。但就个人而言,这种方法似乎比你的第二种方法更清晰一些,更具可读性,并且它做同样的事情。

这并不是建议您应该避免嵌套if语句。我只是建议您也可以随意使用复合if语句。在我看来,if else块的内容应该不仅仅是更多的嵌套ifif else. 如果你的if块内没有任何东西不在nested if块中,那么你的语句可以用 Compound 重写if statements

我的第一种方法也有另一种方法。

String str;
if(cond1) {
    if(cond2) {
        //do stuff
    } else if(cond3) {
        //do stuff
    } else {
        //do stuff
    }
}

这将cond1只检查一次。if它仍然有一个可以重写为的纯嵌套compound,但是如果您担心性能(如果cond1是一个特别耗时的检查),这将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变量作为标志来制作简单而简短的复合条件语句。您可以根据需要多次检查任何条件(条件可能随时更改,您需要flag1 = cond1再次更改等),而无需进行实际检查条件可能需要的所有计算。您只需检查一次并保存条件结果。

于 2013-10-24T13:34:54.320 回答
0

我见过许多不同类型的编码风格,从我所发现的一切来看,这一切都取决于具体情况。没有一个通用的标准,除了不要写不可读的代码。

你的同事可能想要一种特定的风格模式,因此你会遵循那个模式。

对于一个中等经验的程序员来说,两者都非常可读,可读性对于代码来说非常重要,特别是如果它要由其他人维护(这最终是不可避免的)。

这就是你的目标。如果你想要大if/else的语句,我不确定是否有内在的原因,除了它最终可能会产生不可读的代码,这取决于它是如何实现的。

于 2013-10-24T13:33:11.513 回答