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

时间:2013-10-24 13:25:04

标签: coding-style standards

在以下两种方式中,人们不得不选择哪种方法。我个人对方法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";
                    }
                }
            }

2 个答案:

答案 0 :(得分: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块中,则您的语句可以使用复合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个语句,我不确定是否有一个固有的原因,除了最终可能会产生不可读的代码,这取决于它是如何实现的。