Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin:如何确保在使用逻辑AND(&;)或(| |)运算符时计算这两个表达式_Kotlin - Fatal编程技术网

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中使用
|
是个坏主意。它不支持非整数操作数,虽然它恰好适用于整数,
用于非短路和完全断开的类似用法。