Предположим, есть 3 числа:
val x = 10
val y = 5
val z = 14
и мы хотим сделать логику вроде:
if (x + y > z) {
println(x + y)
} else if (x + y < z) {
println(-1)
} else {
println(0)
}
Если наша операция "z + y" стоит дорого, мы должны вычислить ее ровно один раз:
val sum = x + y
if (sum > z) {
println(sum)
} else if (sum < z) {
println(-1)
} else {
println(0)
}
но я хочу более функциональный способ, например:
if (x + y > z) => sum { //This is will not compile :)
println(sum)
} else if (sum < z) {
println(-1)
} else {
println(0)
}
Что-то без необходимости другого оператора для сохранения результата.
Что-то, что я могу соединить с другой функцией, например:
if(x + y > z) sum {
if(sum + 10 > 100) other_sum {
... etc
PS. Совпадение не помогает:
x + y match {
case result if result > z => println(result)
case result if result < z => println(-1)
case _ => println(0)
}
или
val sum = x + y
sum match {
case _ if sum > z => println(sum)
case _ if sum < z => println(-1)
case _ => println(0)
}
Все равно выглядит плохо.