【发布时间】:2017-11-11 14:42:36
【问题描述】:
我正在尝试对我的对象执行操作,但只有在某些事情为真时才这样做。我有几种被认为是“动作”方法的方法,它们执行一些尝试修改对象的动作,如果可以完成该动作,则返回真/假。
示例 1
Thing thing = new Thing();
if (thing.changeSomething()){
if (thing.shouldDoSomething()){
//do more things
}
}
我知道复合布尔表达式,例如检查数字是否在有效值范围内
if(number>0 && number<=10)
//number is valid
但是当子表达式是方法调用时并没有真正做太多
示例 2
if ( thing.changeSomething() && (thing.shouldDoSomething() ){
//do more things
}
示例 2 是否与 示例 1 相同?
示例 2 会调用shouldDoSomething() 方法吗?因为我不希望这种情况发生,因为有时shouldDoSomething() 实际上会产生其他影响并改变对象的其他方面。
【问题讨论】:
-
那么您说的是哪种语言?你标记了java和c#?我不知道 java 是否相同,但在 C# 中,
if (a && b)中的表达式b仅在a为true时才被评估。因此,示例 2 中的thing.shouldDoSomething()只有在thing.changeSomething()返回true时才会被调用。 -
由于欺诈,我投票决定将此问题作为题外话结束
-
如果您打算根据对象的状态执行条件逻辑,您通常希望以一种不首先更改状态的方式公开该状态。确定是否应该执行某事的方法不必为了确定是否需要执行操作而更改其上下文对象的状态。我已经看到许多程序员在他们继承的代码中对此感到厌烦。这是一个应该避免的反模式。
标签: java c# if-statement methods conditional