Kotlin:如何确保在使用逻辑 AND(&&)、OR(||) 运算符时计算两个表达式

Max*_*Max 0 kotlin

我有一些这样的伪代码:

fun foo(): Boolean {
    println("foo")
    return true
}

fun bar() : Boolean {
    println("bar")
    return false
}

fun main() {
    if(foo() || bar()) { 
        // prints foo
    }
}
Run Code Online (Sandbox Code Playgroud)

if语句里面我需要两个表达式进行评估,比如他们foobar运行。但是,此代码仅计算第一个表达式并且仅foo打印

gid*_*dds 6

正如 Max 所说,使用or是最简单的,通常也是最好的解决方案。

但是,因为了解替代方案总是值得的,所以这里有一个。您可以在逻辑之前进行调用:

val fooResult = foo()
val barResult = bar()
if (fooResult || barResult)
    // ...
Run Code Online (Sandbox Code Playgroud)

这是冗长的,需要两个额外的变量。但它的优点是调用是显式的;对于任何阅读代码的人来说,方法总是被调用是显而易见的(如果读者不熟悉,这可能不那么明显or)。如果需要,它为您提供了一个插入调试语句的地方。

  • @gidds:在 C 中使用 `|` 是一个坏主意。它不支持非整数操作数,虽然它恰好适用于整数,但对非短路 AND 的类似使用 `&` 是完全坏了。 (2认同)