我想知道以下哪项是更好的编程实践:
// Below is the contents of a dummy method which is passed a boolean "condition" as a parameter.
int valueA = 3;
int valueB = 5
if (condition == true) {
return valueA
}
else {
return valueB
}
或者,我可以用这种方式编写相同的代码:
int valueA = 3;
int valueB = 5
if (condition == true) {
return valueA
}
return valueB
在这两种情况下,只有条件等于false才会返回valueB,因此不需要使用“else”,但最好还是包含它吗?
答案 0 :(得分:3)
采用以下示例,了解如何使用else
帮助您更好地理解代码
if (inputVar == thingOne) {
doFirstThing();
} else if (inputVar == secondThing) {
doSecondThing();
} else {
doThirdThing();
}
我可以像这样写它。
if (inputVar == thingOne) {
doFirstThing();
return;
}
if (inputVar == thingTwo) {
doSecondThing();
return;
}
doThingThree();
return;
现在问问自己哪些代码看起来更清晰,哪些代码更清楚。
这真的归结为哪种方式最清楚地显示代码正在做什么(不一定代码的哪一部分最短或压痕最少)。
答案 1 :(得分:2)
为了便于阅读,我还想将其他地方放在那里。但是,您也可以写一个简写if / else语句:
return condition ? valueA : valueB;
同样,你自己喜欢写它的方式。
答案 2 :(得分:2)
使用else语句“一目了然”阅读代码更清晰,这样做更好。
或者,一些(但不是全部)编码指南说您应该只在方法结束时返回一次。在这种情况下,你将有一个“返回”值,在if中设置相应的值(在这种情况下需要一个else),然后在方法结束时返回该值。
答案 3 :(得分:1)
else
语句提供了更清晰的条件流,你可以采用第一个片段,没有人会责怪你,但最好根据条件块揭示你的迭代流。
我甚至建议使用辅助int
值来存储返回的结果,然后使用单个return语句,如果您关心可能会进入并审核您的开发人员,这肯定会提供更清晰的信息。来源:
public int test(boolean condition)
{
int valueA = 3;
int valueB = 5;
int result;
if (condition == true)
{
result = valueA;
}
else
{
result = valueB;
}
return result;
}
作为替代方案,我会建议@stealthjong in his answer提到的三元表达式,因为当条件很短且没有嵌套指令在第二和第三个参数中时,它更易读。
答案 4 :(得分:0)
以相同的方式查看两种工作,但只有一个区别,您的行代码在第二行中会更少。如果您接受我的建议,我会在涉及这些条件时亲自跟随第二个。或者你可以使用这个。
return condition ? valueA : valueB;
答案 5 :(得分:0)
我说是的,虽然我养成了这样做的习惯。编程非常重复,实践变得习惯。使用else语句更有效,干净(如果有的话)。
答案 6 :(得分:0)
当方法的行号不超过10时,我会在每个块中返回一个值时使用if-else语句。
但是如果有30行或更多行,则很难读取if-else语句,因此只使用返回值而不是使用else值可能更好。
答案 7 :(得分:0)
我建议使用if-else块(第一种方法),因为它增加了可读性。然而,考虑到性能,我在一个程序中对您的两种方法进行了采样代码如下。
public class test {
public static void main(String args[])
{
int count1=0,count2=0;
for(int i=0;i<50000;i++)
{
long timeStart=System.nanoTime();
method1(false);
long timeEnd=System.nanoTime();
long result1=timeEnd-timeStart;
System.out.println("\n\nTime taken for method 1 is :"+result1);
long Start=System.nanoTime();
method2(false);
long End=System.nanoTime();
long result2=End-Start;
System.out.println("Time taken for method 2 is :"+result2);
if(result1>result2)
{
//increment count2 when result2's execution speed is high (i.e) less time
count2++;
}
if(result1<result2)
{
//increment count1 when result1's execution speed is high
count1++;
}
}
System.out.println("\n\ncount1 value at the end is\t"+count1);
System.out.println("count2 value at the end is\t"+count2);
}
public static int method1(boolean condition)
{
int valueA = 3;
int valueB = 5;
if (condition == true) {
return valueA;
}
else
{
return valueB;
}
}
public static int method2(boolean condition)
{
int valueA = 3;
int valueB = 5;
if (condition == true) {
return valueA;
}
return valueB;
}
}
输出:
Testcase 1:
最后的count1值是10707 最后的count2值是10977
Testcase 2:
最后的count1值是10310 最后的count2值是10225
Testcase 3:
最后的count1值是9590 最后的count2值是10445
Testcase 4:
最后的count1值是10687 最后的count2值是10435
Testcase 5:
最后的count1值是10670 最后的count2值是10223
Testcase 6:
最后的count1值是10594 最后的count2值是10810
Overall cumulative result of all 6 test cases is count1 =62558 count2=63115
因此两种方法的性能没有太大差异。更好的是使用if else块,因为它提供了相同的性能(就时间而言)并提高了可读性。