Kotlin: Как убедиться, что оба выражения вычисляются при использовании логических операторов AND (&&), OR (||) - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть некоторый псевдокод, подобный следующему:

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

Ответы [ 2 ]

5 голосов
/ 05 апреля 2020

Как говорит Макс, использование or является самым простым и, как правило, лучшим решением.

Но, поскольку всегда стоит знать об альтернативах, вот один из них. Вы можете сделать вызовы до логики c:

val fooResult = foo()
val barResult = bar()
if (fooResult || barResult)
    // ...

Это длиннее и требует двух дополнительных переменных. Но оно имеет то преимущество, что вызовы являются явными; для любого читающего код очевидно, что методы всегда вызываются (что может быть не так очевидно, если читатель не знаком с or). И это дает вам место для вставки отладочных операторов, если это необходимо.

2 голосов
/ 05 апреля 2020

Вы можете использовать булевы методы or и and, они не имеют короткого замыкания и оценивают оба выражения:

if(foo() or bar()) {
    // prints foo
    // prints bar
}

Вот документация для метода or:

public infix fun or(other: Boolean): Boolean

Выполняет логическую операцию or между этим логическим и [другим]. В отличие от оператора ||, эта функция не выполняет оценку короткого замыкания. И this, и [другие] всегда будут оцениваться.

Подробнее см. документы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...