关于条件退货声明的良好编程实践

时间:2014-09-18 08:19:11

标签: java

我想知道以下哪项是更好的编程实践:

// 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”,但最好还是包含它吗?

8 个答案:

答案 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块,因为它提供了相同的性能(就时间而言)并提高了可读性。