Для меня это классический вариант использования монадического интерфейса.
for {
opt <- iterable
t <- opt
} yield t
Это просто сахар для решения flatMap
, описанного выше, и он выдает идентичный байт-код. Однако синтаксис имеет значение, и я думаю, что один из лучших вариантов использования монадического синтаксиса Scala for
- это когда вы работаете с Option
, особенно в сочетании с коллекциями.
Я думаю, что эта формулировка значительно более читабельна, особенно для тех, кто не очень знаком с функциональным программированием. Я часто пробую как монадические, так и функциональные выражения цикла и вижу, что кажется более простым. Я думаю, что flatMap - это жесткое имя для большинства людей, которое нужно выкрикивать (и на самом деле, называя его >>=
, для меня это более интуитивно понятно).