Kotlin:如何确保在使用逻辑AND(&;)或(| |)运算符时计算这两个表达式
我有一些类似这样的伪代码:Kotlin:如何确保在使用逻辑AND(&;)或(| |)运算符时计算这两个表达式,kotlin,Kotlin,我有一些类似这样的伪代码: fun foo(): Boolean { println("foo") return true } fun bar() : Boolean { println("bar") return false } fun main() { if(foo() || bar()) { // prints foo } } 在if语句中,我需要计算两个表达式,例如运行foo和bar。但是,此代码仅计算第一个表达式,
fun foo(): Boolean {
println("foo")
return true
}
fun bar() : Boolean {
println("bar")
return false
}
fun main() {
if(foo() || bar()) {
// prints foo
}
}
在if语句中,我需要计算两个表达式,例如运行
foo
和bar
。但是,此代码仅计算第一个表达式,并且仅打印foo
您可以使用布尔的或和和方法,它们不会短路并计算两个表达式:
if(foo() or bar()) {
// prints foo
// prints bar
}
以下是或方法的文档:
public infix fun or(other: Boolean): Boolean
在该布尔值和[另一个]布尔值之间执行逻辑或
操作。与|
运算符不同,此函数不执行短路评估。将始终对该
和[其他]进行评估
有关更多详细信息,请参见,正如Max所说,使用是最简单而且通常是最好的解决方案
但是,因为它总是值得注意的替代品,这里有一个。您可以在逻辑之前进行调用:
val fooResult = foo()
val barResult = bar()
if (fooResult || barResult)
// ...
这是一个冗长的过程,需要两个额外的变量;对于阅读代码的人来说,方法总是被调用是显而易见的(如果读者不熟悉或,那么调用方法可能就不那么明显了)。如果需要,它为您插入调试语句提供了一个位置。这是一种通用的方法,在其他编程语言中也是如此,而或
是特定于Kotlin的。公平地说,Kotlin的或
与C和Java中的位运算符|
做的是相同的事情,因此这种方法不是特定于Kotlin的。(区别更清楚一点;在C/Java中很容易将|
与|
混在一起……@gidds:在C中使用|
是个坏主意。它不支持非整数操作数,虽然它恰好适用于整数,和
用于非短路和完全断开的类似用法。