Ну, это вроде как "говори, не спрашивай".Рассмотрим эти две строки:
if (opt.isDefined) println(opt.get)
// versus
opt foreach println
В первом случае вы смотрите внутрь opt
, а затем реагируете в зависимости от того, что видите.Во втором случае вы просто говорите opt
, что вы хотите сделать, и позволяете ему разобраться с этим.
Первый случай слишком много знает о Option
, копирует внутреннюю логику, хрупок и склоненк ошибкам (это может привести к ошибкам во время выполнения, а не к ошибкам во время компиляции, если они записаны неправильно).
Добавьте к этому, он не может быть компонован.Если у вас есть три варианта, один для понимания позаботится о них:
for {
op1 <- opt1
op2 <- opt2
op3 <- opt3
} println(op1+op2+op3)
С if
все начинает быстро запутываться.