J: Как ПРАВИЛЬНО обрабатывать ошибки в Kotlin и Java? Что я понял за 15 лет программирования - видео HD

J: Как ПРАВИЛЬНО обрабатывать ошибки в Kotlin и Java? Что я понял за 15 лет программирования - видео
00:16:11
Обнаружено блокирование рекламы на сайте

Для существования нашего сайта необходим показ рекламы. Просим отнестись с пониманием и добавить сайт в список исключений вашей программы для блокировки рекламы (AdBlock и другие).

12n.ru 18135 роликов

Как ПРАВИЛЬНО обрабатывать ошибки в Kotlin и Java? Что я понял за 15 лет программирования - видео.

Рассказываем, как удобнее всего обрабатывать исключения и нештатные ситуации в Kotlin и других языках и почему стандартные исключения не всегда лучший вариант.

Ссылки на материалы:

Checked exceptions in Kotlin https://kotlinlang.org/docs/java-to-k...

Either (ArrowKt) https://arrow-kt.io/learn/typed-error...

Railway Oriented Programming https://habr.com/ru/articles/339606/

Either для Java (Vavr) https://docs.vavr.io/#_either

Обработка ошибок в Rust https://doc.rust-lang.org/book/ch09-0...

Result для Python (Returns)https://returns.readthedocs.io/en/lat...

Правило для Detekt https://detekt.dev/docs/rules/potenti...

Тайм-коды для самых нетерпеливых:00:00 Введение00:30 Базовый пример01:41 Способы обработки ошибок03:15 Проверяемые VS Непроверяемые исключения06:26 Код возврата как волшебная пилюля07:20 Больше данных! Как передать инфо об ошибке08:56 Успех — не ошибка, а много ошибок — не успех09:44 Мощь Arrow11:40 Railway Oriented Programming13:27 Альтернатива из стандартной библиотеки Kotlin13:59 Другие языки программирования14:14 Исключения тоже нужны15:31 Лечим забывчивость (и потерянный код возврата)15:55 Заключение

Поваренная книга Дядюшки Боба: howto.stringconcat.ru/cleanar... Телеграмм-канал с кучей полезной информации: t.me/stringconcat

RSS
@kamegatze6568
12:52
+1
Спасибо за видео, реально интересно
@SirDratuti
16:22
+1
А почему бы просто не использовать sealed interface как наследник другого sealed interface'а?
sealed interface PaymentResult
data class Success(...): PaymentResult
sealed interface Error: PaymentResult
data class AccountNotFound(...): Error
и так далее
В таком случае нам не нужно будет при необходимости маппинга ошибки в какой-либо объект делать специфичный кейс для состояния Success, ведь мы просто можем передать ошибку с типом PaymentResult.Error
@lis0x90d
18:16
Scala которая как раз попыталась обединить функционалный и обьектный подход. Очередной виток переизобретения
@voult89
17:24
Подход с Either прикольный, но вот пока столкнулся с такой проблемой, что когда обновляю агрегат, приходится обновлять и его поля. Ну а каждое поле содержит логику обновления у себя, как и валидацию. В итоге метод обновления агрегата состоит из fold или onLeft/onRight.
Читать порой сложно такое. Пока не знаю как сделать красиво.

Что касается необрабатываемых ошибок, то на маленьком проекте лучше использовать их, так как тут сам написал — сам обработал.
Ну и если не чистая архитектура, тогда ошибки можно еще и наследовать от нужного типа (unporcessable, notfound, итд). И в обработчике ошибок ловить по дефолту нужный тип.
@MentorOfMentors
17:31
13:04 опечатка? UserUser
@spacecowboy3000
22:19
Йо это реально крутой канал, а можно плюс ещё каких нибудь серебрянных пуль. Я просто занимаюсь легаси на 8 джаве в тяжёлом интерпрайзе. И уже слабо представляю как выглядит современный продуктовый джава код.