更好的实践:从void方法打印或从方法返回值并从方法调用方打印

时间:2014-10-16 00:38:50

标签: java

在使用参数打印void方法的值或将值返回给方法调用者并在方法调用者中打印之间,哪种方法被认为是更好的做法(如果有的话)?例如,第一个代码摘录是前者,第二个代码摘录是后者:

public static void main(String[] args){
    printValue(5);
}

public static void printValue(int number){
    if(number == 10)
        System.out.println("Message A");

    else
        System.out.println("Message B");
}

public static void main(String[] args){
    System.out.println(getValue(5));
}

public static String getValue(int number){
    if(number == 10)
        return "Message A";

    else
        return "Message B";
}

3 个答案:

答案 0 :(得分:4)

我会改变一些事情:
 1.根据Java代码约定(关于using brackets)写入  2.只有一个退出方法:

public static String getValue(int number){
    String result = null;
    if(number == 10) {
        result = "Message A";
    } else {
        result = "Message B";
    }
    return result;
}

最后,在打印它的地方并不重要 - 但我更喜欢在方法中打印 - 这样如果你有多个来电者 - 你不必重新实施打印导致不同的地方。

答案 1 :(得分:0)

第一种方法的优点是你已经封装了输出方法,所以即使你从很多地方调用printValue,你也可以改变一个位置,如果你需要添加条件行为或打印一个值。不同的方式。

第二种方法的优点是您可以编写测试来验证您的价值转换。

如果您需要通过printValue()调用getValue()来获得这两种优势,您甚至可能希望合并这些方法,以便您可以针对getValue()编写测试以及将输出机制封装在{ {1}}。

如果您的要求没有规定最有用的方法,我建议您优先考虑代码的清晰度,并确保在需求发生变化时重构代码。

答案 2 :(得分:0)

第二种方法在大多数实际应用中会更好。

  1. 可以通过自动化轻松测试,而不是手动检查控制台
  2. 它允许您使用的值不仅仅是打印。
  3. 正在执行的活动是选择正确的消息字符串。如果我们将方法重命名为更具描述性的方法,我们可以选择

    public static String determineMessageFromValue(int number)
    

    或者,如果您将打印保留在方法

    public static String determineAndPrintMessageFromValue(int number)
    

    这比你想要的更有语意,可能更具体。

    如果程序的目标总是对控制台执行某些操作,那么看起来有点像矫枉过正,但它可以帮助您在更复杂的系统中使用此代码时考虑责任。例如,如果您决定在java swing UI上显示值,那么将方法打印到控制台就不会有用了。也在网页上。