在if/else条件中调用方法是不好的做法吗?

Koo*_*ing 0 java conditional if-statement coding-style conditional-statements

这样做是不好的做法:

Scanner scan = new Scanner(System.in);
if(scan.nextInt() == 5) {                //testing if input is equal to 5
    System.out.println("input equals 5");
}
Run Code Online (Sandbox Code Playgroud)

关于什么:

Scanner scan = new Scanner(System.in);
if(scan.nextInt() == scan.nextInt()) {    //testing if two inputted ints are equal to each other
    System.out.println("input1 equals input 2");
}
Run Code Online (Sandbox Code Playgroud)

我在某处读到这会导致"意外结果",但我不知道这意味着什么.我已经测试了这一点,并没有遇到任何意外的事情.

Psy*_*ode 5

在 if/else 中调用方法是一种不错的做法。它很好,特别是当它返回一个你只需要一次的值时。


Kul*_*mpa 5

这里的问题不是你在if块的条件内调用一个方法.问题是你的功能不纯,即它有副作用.如果您查看@Krayo的示例,您将看到两个看似相等的代码片段如何具有不同的行为:&&如果第一个表达式求值,则仅执行第二个表达式true.类比,||如果第一个表达式,则仅执行第二个表达式false.

看看Command和Query分离原理.它声明您的方法应该计算并返回一个值,或者它们应该更改对象的状态,但不能同时更改两者.

编辑:另外,看看统一访问原则.程序的语义不应取决于您是通过存储还是通过计算获得值.如果您的程序在访问字段时的行为与执行计算相同值的方法的行为不同,那么您应该修复方法.注意:行为和性能是两双鞋:访问字段将比计算值更快.