当条件满足时,如何在when块中执行多个代码?

时间:2020-08-09 17:49:20

标签: kotlin

我知道when { }可以替代if-else分支。但是,如果条件成立,是否可以执行多个分支?

示例:

val x = 5
val y = 4
    
when {
    x.isOdd() -> print("x is odd") //True, prints "x is odd"
    y.isEven() -> print("y is even") //Also True, but doesn't get executed
    else -> print("x+y is even.")
}

有什么办法可以执行第二行吗?

3 个答案:

答案 0 :(得分:1)

无法使用when语句执行此操作,因为when语句仅执行具有真实条件的第一个块。

在存在许多不同条件的情况下执行此操作的最佳方法,其中任意多个条件都可能为真且应执行,然后如果其中的 none 不为真,则要执行一个块,是使用if语句并保留Boolean变量(在下面的示例中为handled)来跟踪是否已执行任何操作,例如:

fun Int.isOdd() = this % 2 != 0
fun Int.isEven() = this % 2 == 0

val x = 5
val y = 4

var handled = false
if (x.isOdd()) {
    println("x is odd")
    handled = true
}
if (y.isEven()) {
    println("y is even")
    handled = true
}
// Add however many other conditions here

if (!handled) {
    // This will be executed if none of the above conditions are satisfied
    print("x is not odd and y is not even.")
}

live demo

此打印:

x is odd
y is even

答案 1 :(得分:-1)

如果要同时显示两个打印机,为什么不将两个打印机都放在同一主体中。

赞:

when {
        x.isOdd()  && y.isEven() -> {print("x is odd\n y is even") }
        else -> print("x+y is even.")
    }

答案 2 :(得分:-1)

正如您在问题中说的,何时代替if-else。如果在示例中使用if-else,则仅打印第一项。第一个条件为真,因此将不检查第二个条件。您可以使用以下内容:

val x = 5
val y = 4   
         
        
if x.isOdd()
    print("x is odd")

if   y.isEven() 
    print("y is even")

if ((!x.isOdd())&&(y.isEven())||(x.isOdd())&&(!y.isEven())) 
    print("x+y is even.")