Coding style 哪种编码风格更具可读性或更可取?

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

在以下两种方式中,您必须选择哪种方法。我个人对方法2,即if elseladder方法感到满意。但我的朋友告诉我,他们在编码中调用冗余,他用许多单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";
                    }
                }
            }

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

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

对于一个有一定经验的程序员来说,两者都是非常可读的,可读性对于代码来说非常重要,尤其是当代码将由其他人维护时,这是不可避免的

这就是你的目标。如果您想要大的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