Coding style 哪种编码风格更具可读性或更可取?
在以下两种方式中,您必须选择哪种方法。我个人对方法2,即if elseladder方法感到满意。但我的朋友告诉我,他们在编码中调用冗余,他用许多单if语句实现了这一点,比如。。 示例:Coding style 哪种编码风格更具可读性或更可取?,coding-style,standards,Coding Style,Standards,在以下两种方式中,您必须选择哪种方法。我个人对方法2,即if elseladder方法感到满意。但我的朋友告诉我,他们在编码中调用冗余,他用许多单if语句实现了这一点,比如。。 示例: if( cond1 && cond2 ){} if(cond1 && cond3){} if(cond3 && cond2){} etc.. Instead of., if(cond1) { } else
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";
}
}
}
我见过许多不同类型的编码风格,从我所发现的一切来看,这完全取决于具体情况。除了不要编写不可读的代码之外,没有一个通用的标准 你的同事可能想要一个特定的风格模式,因此你会遵循这个模式 对于一个有一定经验的程序员来说,两者都是非常可读的,可读性对于代码来说非常重要,尤其是当代码将由其他人维护时,这是不可避免的 这就是你的目标。如果您想要大的If/else语句,我不确定是否有一个内在的原因,除了它可能最终使代码无法读取之外,这取决于它的实现方式
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块中没有不在嵌套If块中的内容,则可以使用复合If语句重写语句
我的第一种方法还有一种替代方法
String str;
if(cond1) {
if(cond2) {
//do stuff
} else if(cond3) {
//do stuff
} else {
//do stuff
}
}
这将只检查cond1一次。它仍然有一个纯嵌套的if,可以重写为复合的,但是如果您关心性能,如果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变量作为标志来生成简单而简短的复合条件语句。您可以在条件可能更改的任何时候检查任意条件,您需要再次标记1=cond1等,而无需进行实际检查条件所需的所有计算。您只需检查一次,然后保存条件的结果。使用最适合您的需要和您可以更好阅读的内容。取决于读者……正如莎士比亚所说,情人眼里出西施。这里有一种介于两者之间的方法。就我个人而言,两者我都不喜欢。我觉得在检查cond1->3次时有冗余,这可能会降低性能。有一些冗余。你可以用几种不同的方法重写它。这取决于语言。例如,Java将短路&&,因此您可以将ifcond1&&cond2重写为ifcond2&&cond1,并且只有当cond2返回true时,它才会检查cond1。这取决于您的检查在性能方面的每个条件有多复杂。但是,在大多数情况下,对性能进行微小的改进,以实现大规模的可读性改进是很好的。在第一个else if中是cond1和cond3。修复了这个问题,并添加了另一个替代方法,解决了您的一些性能问题。您的替代方法与我首选的方法非常相同。但是if不喜欢浮动的else if.,而不以else结尾,因为我觉得没有以else结尾的代码是不完整的。因此,我通常会在else{if}中包含{},而不是else-if:P