是否在功能上等同于直接调用该方法的布尔返回方法?
我正在更新一些代码,并且我有一个void方法(validateFile),用于测试文件并将故障直接写入某些日志文件。我想为每个通过的文件添加一个计数器,但是我不想丢失在发生故障时完成的日志记录。是否在功能上等同于直接调用该方法的布尔返回方法?
在成功运行方面严格validateFile方法的,是这样的:
validateFile(filename);
功能上等同于这个? (假设我改变返回类型为布尔,正确把return语句中)
if(validateFile(filename)){
passCount++;
}
如果是等价的,是有一个原因(最佳做法,等等),我不应该这样做呢?
是的,它是等价的。不,我没有理由认为你不应该这样做。浮现在脑海
只是一个可能的警告,有条件的经营者该混合时要小心:
if (a() && b());
在这种情况下,b()
将被调用当且仅当a()
回报true
。
接得好。 +1来照顾这个问题。 – malexmave 2012-02-27 18:28:09
我不会在这种情况下,更应该我需要做的是,在未来,会如果(一个()& b());工作,以避免短路? – VolcanoLotus 2012-02-27 18:31:12
是的,这是可行的。 – 2012-02-27 18:48:10
是的,你的代码将以这种方式工作,它会编译。在大多数情况下,它实际上是最好的方式。
编辑:假设,在第一种情况下,你将它绑定到一个变量并将其放置在if中。否则,不是那么多,第一个不会工作。
后者有更好的关注点分离。我更喜欢它。
是的,if(validateFile(filename))
将以正常的方式运行validateFile(filename)
。一旦它返回—,假设它正常返回(而不是抛出异常)—其返回值将按照您的预期使用。
是的,这将工作。
以这种方式调用方法非常标准。
是的,它是等价的。它就像:
boolean result = validateFile(filename);
if(result){
passCount++;
}
是的,它是等效的;没有理由说这可能会比原来的代码差。
你也可以做同样的事情在同一行,像这样:
passCount += validateFile(filename) ? 1 : 0;
感谢三元运算符的例子;我对开发工作比较陌生,对我来说这是一个新手。 – VolcanoLotus 2012-02-27 18:37:22
你说的功能上等同的意思吗?在第二种情况下,会发生额外的事情。但是在这两种情况下,函数都会被执行。 – 2012-02-27 18:19:23
严格按照完整执行的validateFile在功能上等效。我想不出为什么不这样做,但是我不想在一年后创造一种情况,那就是我的同事们必须回到这个问题上,并且因为这样设置而诅咒我:) – VolcanoLotus 2012-02-27 18:29:35