Как я полюбил Either и почему это круто 😎
У функционального подхода к написанию кода есть один огромный плюс — он сразу отсекает кучу не очень квалифицированных специалистов. Серьезно, сколько раз я видел live-coding на чем-то вроде Flux, и всё заканчивалось одинаково: оно даже не компилируется. А если упомянуть Scala... ну вы поняли.
Но надо искать светлые стороны! Один мегаудобный паттерн я всё-таки нашел и теперь использую во всех своих новых проектах — это Either! 🚀
Что такое Either?
Either — это альтернатива стандартным исключениям и null-check'ам. Он позволяет выразить результат выполнения операции в виде двух возможных вариантов:
Left — для ошибки или неудачи.
Right — для успешного результата.
Его можно представить как контейнер:
Где:
Error — тип ошибки (например, строка или кастомный класс).
Result — тип успешного результата.
Почему Either удобен?
1 Избавление от исключений: больше никаких try-catch. Ошибки обрабатываются как обычные значения.
2 Читабельность: твой код становится декларативным и предсказуемым.
3 Цепочки вызовов: методы вроде map и flatMap делают обработку данных интуитивной.
4 Никакого null: всё строго типизировано, и IDE помогает тебе не забыть обработать оба варианта.
Либа для Kotlin — Arrow Чтобы работать с Either удобно, есть библиотека Arrow. Это мощный функциональный toolkit для Kotlin, который упрощает использование функциональных паттернов.
Как это работает?
Пример: чтение данных из файла.
Здесь используется fold — метод, который обрабатывает и Left, и Right в одном месте.
Почему я люблю Either ❤
Этот паттерн настолько удобен, что я затащил его даже в Dart-код WEB UI-части "Тут даром". Там он помогает мне разруливать ошибки прямо в интерфейсе, делая код проще и читабельнее.
Он делает разработку чище, защищает от неожиданных ошибок и позволяет сосредоточиться на логике, а не на "что-то опять сломалось". Если ты ещё не пробовал Either, самое время начать! 💪