Как я полюбил Either и почему это круто 😎

Как я полюбил Either и почему это круто 😎

У функционального подхода к написанию кода есть один огромный плюс — он сразу отсекает кучу не очень квалифицированных специалистов. Серьезно, сколько раз я видел live-coding на чем-то вроде Flux, и всё заканчивалось одинаково: оно даже не компилируется. А если упомянуть Scala... ну вы поняли.

Но надо искать светлые стороны! Один мегаудобный паттерн я всё-таки нашел и теперь использую во всех своих новых проектах — это Either! 🚀

Что такое Either?

Either — это альтернатива стандартным исключениям и null-check'ам. Он позволяет выразить результат выполнения операции в виде двух возможных вариантов:

Left — для ошибки или неудачи.

Right — для успешного результата.

Его можно представить как контейнер:

Either<Error, Result>

Где:

Errorтип ошибки (например, строка или кастомный класс).

Resultтип успешного результата.

Почему Either удобен?

1 Избавление от исключений: больше никаких try-catch. Ошибки обрабатываются как обычные значения.

2 Читабельность: твой код становится декларативным и предсказуемым.

3 Цепочки вызовов: методы вроде map и flatMap делают обработку данных интуитивной.

4 Никакого null: всё строго типизировано, и IDE помогает тебе не забыть обработать оба варианта.

Либа для Kotlin — Arrow Чтобы работать с Either удобно, есть библиотека Arrow. Это мощный функциональный toolkit для Kotlin, который упрощает использование функциональных паттернов.

Как это работает?

Пример: чтение данных из файла.

fun readFileContent(path: String): Either<String, String> { return try { val content = File(path).readText() Either.Right(content) } catch (e: IOException) { Either.Left("Failed to read file: ${e.message}") } } val filePath = "data.txt" val message = readFileContent(filePath).fold( ifLeft = { error -> "Ошибка: $error" }, ifRight = { content -> "Содержимое файла: $content" } ) println(message)

Здесь используется fold — метод, который обрабатывает и Left, и Right в одном месте.

Почему я люблю Either ❤

Этот паттерн настолько удобен, что я затащил его даже в Dart-код WEB UI-части "Тут даром". Там он помогает мне разруливать ошибки прямо в интерфейсе, делая код проще и читабельнее.

Он делает разработку чище, защищает от неожиданных ошибок и позволяет сосредоточиться на логике, а не на "что-то опять сломалось". Если ты ещё не пробовал Either, самое время начать! 💪

Начать дискуссию