Самый простой способ избежать var
с несколькими условиями - это использовать временные значения
val a1 = 2
val a2 = if (condition) a1*3 else a1
val a3 = if (condition2) a2*6 else a2
val a = if (condition3) a3*8 else a3
val b = a * 2/*someOperation*/
В реальном коде вы бы дали a1
, a2
и a3
значимые имена дляопишите результат каждого этапа обработки.
Если вас беспокоит наличие этих дополнительных значений в области видимости, поместите его в блок:
val a = {
val a1 = 2
val a2 = if (condition) a1*3 else a1
val a3 = if (condition2) a2*6 else a2
if (condition3) a3*8 else a3
}
Обновление
Есливам нужен более функциональный подход, соберите вместе условия и модификации и примените их по очереди, например так:
val mods: List[(Boolean, Int=>Int)] = List(
(condition, _*3),
(condition2, _*6),
(condition3, _*8)
)
val a = mods.foldLeft(2){ case (a,(cond, mod)) => if (cond) mod(a) else a }
Это действительно уместно только тогда, когда условия или модификации являются более сложными, и сохраняя ихвместе делает код понятнее.