Skip to content

Commit ff98ce6

Browse files
committed
В статью об обработке ошибок добавлено примечание о Rich Errors
1 parent 2a41711 commit ff98ce6

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

content/docs/patterns/operations-impl/error-handling.adoc

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,26 @@ weight: 500
1414

1515
Официального руководства по обработке ошибок в Kotlin не существует, но есть https://elizarov.medium.com/kotlin-and-exceptions-8062f589d07[пост] Романа Елизарова (бывшего ведущего дизайнера Kotlin), который можно считать полуофициальным руководством.
1616
В этом посте Елизаров рекомендует использовать исключения только для логических ошибок (тех, что программисты должны исправить в коде) и ошибок ввода-вывода (тех, что девопсы должны исправить в инфраструктуре или конфигурации).
17-
А для всего остального использовать link:++{{<ref "/docs/terminology/functional-error-handling">}}++[ функциональный (ака типизированный)] подход к обработке ошибок.
17+
А для всего остального использовать link:++{{<ref "/docs/terminology/functional-error-handling">}}++[функциональный (ака типизированный)] подход к обработке ошибок.
1818

19-
Но в отличие от "прирождённых" функциональных языков с типами (Haskell, Scala, F#), Kotlin не хватает целого ряда инструментов для эффективной работы в таком стиле:
19+
Но в отличие от "прирождённых" функциональных языков с типами (Haskell, Scala, F#), в Kotlin 2.2 не хватает целого ряда инструментов для эффективной работы в таком стиле:
2020

2121
. лаконичного синтаксиса для типов-сумм;
2222
. встроенной монады для ошибок;
2323
. синтаксической поддержки работы с монадами.
2424

25-
В результате работа с ошибками в функциональном стиле на Kotlin становится довольно громоздкой.
25+
В результате работа с ошибками в функциональном стиле на Kotlin становится довольно громоздкой.
2626

2727
Кроме того функциональный стиль работы с ошибками не интегрируется с основными и даже нативными для Kotlin фреймворками и библиотеками.
2828
В частности ни Spring, ни Exposed не откатят транзакцию при возврате стандартного Result.failure из транзакционного метода/блока, не говоря уж о кастомном ADT.
2929
Как и в корутинах возврат Result.failure из корутины-потомка не приведёт к автоматическому останову корутин-сиблингов.
3030

31+
[NOTE]
32+
====
33+
Судя по всему, https://github.com/Kotlin/KEEP/blob/main/proposals/KEEP-0441-rich-errors-motivation.md[Kotlin Rich Errors] решат проблему эргономики функционального подхода к обработке ошибок и тогда можно будет рассмотреть его более активное применение.
34+
Однако надо ещё посмотреть как такие ошибки будут обрабатываться в библиотеках и фреймворках.
35+
====
36+
3137
Ещё одной проблемой функционального подхода к обработке ошибок в Kotlin является то, что в случае процедур (методов и функций, возвращающих Unit) ошибку проще проигнорировать, чем обработать.
3238

3339
Наконец, в Clojure (функциональном языке) выброс исключения https://www.daveliepmann.com/articles/idiomatic-clojure-errors.html[является идиоматичным] способом обработки ошибок, а Скот Влашин (автор термина ROP и один из активных пропагандистов функциональной архитектуры) https://fsharpforfunandprofit.com/posts/against-railway-oriented-programming/[рекомендует] исключения для быстрого завершения операции.

0 commit comments

Comments
 (0)