Как проверить двойное значение на Null или Zero в kotlin
val ratio:Double? = 0.0
val calRatio = if (ratio == null || ratio == 0.0)
0.12
else
ratio
соотношение в null , 0.0 , 0.1
если коэффициент равен нулю или 0,0, то вернуть 0,12
и соотношение равно 0,2 или больше, а затем возвращает такое же значение отношения
как проверить, что этот алгоритм не использует оператор if
Даже если вы по какой-то причине не хотите использовать конкретный оператор if, это выражение if, а не оператор if.





Вы можете написать это в idomatic Kotlin без оператора if, используя takeUnless.
val ratio: Double? = 0.0
val calRatio = ratio.takeUnless { it == 0.0 } ?: 0.12
Вызов takeUnless проверяет, соответствует ли число предикату it == 0.0. Если предикат оценивается как true, возвращается null. Только когда предикат оценивается как false, возвращается фактическое число.
Мы можем понять, почему это работает, рассмотрев три возможных случая:
ratio равно null, предикат it == 0.0 оценивается как false. Вызов ratio.takeUnless { it == 0.0 } возвращает значение ratio, которое равно null. Поскольку его левый операнд равен null, оператор ?: возвращает правое значение 0.12.ratio равно 0.0, предикат it == 0.0 оценивается как true. Вызов ratio.takeUnless { it == 0.0 } игнорирует значение ratio и вместо этого возвращает null. Поскольку его левый операнд равен null, оператор ?: возвращает правое значение 0.12.ratio является любым ненулевым, ненулевым числом, предикат it == 0.0 оценивается как false. Вызов ratio.takeUnless { it == 0.0 } возвращает значение ratio, которое является исходным числом. Поскольку его левый операнд не равен нулю, оператор ?: возвращает левое значение.Я бы предпочел использовать takeIf вместо takeUnless, чтобы улучшить читаемость. Я считаю, что при чтении кода гораздо легче увидеть положительные утверждения. На мой взгляд, ratio.takeIf { it != 0.0 } ?: 0.12 легче понять, чем ratio.takeUnless { it == 0.0 } ?: 0.12
Почему бы вам не использовать оператор if?