Java 如何规避网络的缺点`||`
我有两种方法Java 如何规避网络的缺点`||`,java,Java,我有两种方法booleanfoo1()和booleanfoo2()。如果其中至少有一个是true,那么我需要调用save()。但我需要两个函数来运行 如果我写If(foo1()| | foo2()){save()}那么foo2()将不会运行,因为|的工作方式 我现在写 boolean f1 = foo1(); boolean f2 = foo2(); if (f1 || f2) {save()} 但这不是很优雅 我是否遗漏了一些明显的内容?您应该使用操作符(请参阅): 请注意,这同样适用于和
booleanfoo1()
和booleanfoo2()
。如果其中至少有一个是true
,那么我需要调用save()
。但我需要两个函数来运行
如果我写If(foo1()| | foo2()){save()}
那么foo2()
将不会运行,因为|
的工作方式
我现在写
boolean f1 = foo1();
boolean f2 = foo2();
if (f1 || f2) {save()}
但这不是很优雅
我是否遗漏了一些明显的内容?您应该使用
操作符(请参阅):
请注意,这同样适用于和。例如,如果您编写:
if (returnFalse() & returnTrue()) {
destroyTheWorld();
}
然后两种方法都会运行,但世界是安全的
请注意,不熟悉|
操作符的程序员可能会认为这是一个输入错误,并可能会在其中添加另一个管道。确保做好文档记录,或者简单:
f1 = method1();
f2 = method2();
if (f1 || f2) {
// ...
}
你确实错过了一些显而易见的东西
使用|
而不是|
前者总是同时计算两个参数,适用于boolean
类型。但它不是特别地道,因此容易被过度热情的重构者修改,所以我建议您使用注释,或者保留所谓的不雅代码,因为这确实为您提供了我浮华的解决方案所缺乏的隐式清晰性。使用位运算符:
这将保证对这两个术语进行评估,因此在您的案例中执行这两个方法
if(foo1()| foo2()){save()}
您可以使用
操作符
只要做:
if (f1 | f2) {save()}
@P45迫在眉睫:一定要对它或其他东西进行评论,否则它看起来像一个打字错误。“这不是很优雅”我不同意。你的意图很清楚。每一次的清晰度都超过了行数。如果您使用If(foo1()| foo2()){save();}
这看起来像是一个打字错误,并且模糊了确保您同时调用这两个函数的重要性。依赖|
而不是一个捷径运算符可能是一个令人惊讶的用法。这表明foo2()
有副作用,阅读此代码是否需要这些副作用尚不清楚。我认为你应该这样做,你已经在上面清楚地表明你试图实现什么。|
和|
之间的区别很容易被忽略(就像你可能做的那样)@T.J.Crowder snap。
if (f1 | f2) {save()}