В чем разница между «&&» и «и» в котлине?
в моем коде, когда первое условие ложно, я заметил, что условие после «и» все еще оценивается, но не оценивается в случае «&&». почему это?
Вы сами ответили на вопрос - если вы используете and
, вы оцениваете все выражение.
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/and.html
Отвечая на вопрос, почему это происходит, это потому, что and
— это не оператор, а инфиксная функция на типе Bool
. Короткое замыкание — это правило компилятора, которое применяется к логическим операторам, а не к вызовам функций.
Так чем же полезна эта функция and
?
В некоторых случаях вызов правильного выражения может иметь побочные эффекты, и вы хотите, чтобы эти побочные эффекты происходили независимо от левого выражения.
if (!(saveToDatabase() and writeToNoficationQueue())) {
print("At least one thing went wrong there. Check the logs to find out.")
}
@lesderid Поскольку на самом деле это побитовый оператор И, дополнительную информацию см. здесь: en.wikipedia.org/wiki/Bitwise_operation
Я не очень хорошо знаком с Kotlin, но мне интересно, почему он реализован как встроенный, а не как функция, которая просто возвращает
a && b
.