You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/docs/patterns/operations-impl/error-handling.adoc
+9-3Lines changed: 9 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,20 +14,26 @@ weight: 500
14
14
15
15
Официального руководства по обработке ошибок в Kotlin не существует, но есть https://elizarov.medium.com/kotlin-and-exceptions-8062f589d07[пост] Романа Елизарова (бывшего ведущего дизайнера Kotlin), который можно считать полуофициальным руководством.
16
16
В этом посте Елизаров рекомендует использовать исключения только для логических ошибок (тех, что программисты должны исправить в коде) и ошибок ввода-вывода (тех, что девопсы должны исправить в инфраструктуре или конфигурации).
17
-
А для всего остального использовать link:++{{<ref "/docs/terminology/functional-error-handling">}}++[функциональный (ака типизированный)] подход к обработке ошибок.
17
+
А для всего остального использовать link:++{{<ref "/docs/terminology/functional-error-handling">}}++[функциональный (ака типизированный)] подход к обработке ошибок.
18
18
19
-
Но в отличие от "прирождённых" функциональных языков с типами (Haskell, Scala, F#), Kotlin-у не хватает целого ряда инструментов для эффективной работы в таком стиле:
19
+
Но в отличие от "прирождённых" функциональных языков с типами (Haskell, Scala, F#), в Kotlin 2.2 не хватает целого ряда инструментов для эффективной работы в таком стиле:
20
20
21
21
. лаконичного синтаксиса для типов-сумм;
22
22
. встроенной монады для ошибок;
23
23
. синтаксической поддержки работы с монадами.
24
24
25
-
В результате работа с ошибками в функциональном стиле на Kotlin-е становится довольно громоздкой.
25
+
В результате работа с ошибками в функциональном стиле на Kotlin становится довольно громоздкой.
26
26
27
27
Кроме того функциональный стиль работы с ошибками не интегрируется с основными и даже нативными для Kotlin фреймворками и библиотеками.
28
28
В частности ни Spring, ни Exposed не откатят транзакцию при возврате стандартного Result.failure из транзакционного метода/блока, не говоря уж о кастомном ADT.
29
29
Как и в корутинах возврат Result.failure из корутины-потомка не приведёт к автоматическому останову корутин-сиблингов.
30
30
31
+
[NOTE]
32
+
====
33
+
Судя по всему, https://github.com/Kotlin/KEEP/blob/main/proposals/KEEP-0441-rich-errors-motivation.md[Kotlin Rich Errors] решат проблему эргономики функционального подхода к обработке ошибок и тогда можно будет рассмотреть его более активное применение.
34
+
Однако надо ещё посмотреть как такие ошибки будут обрабатываться в библиотеках и фреймворках.
35
+
====
36
+
31
37
Ещё одной проблемой функционального подхода к обработке ошибок в Kotlin является то, что в случае процедур (методов и функций, возвращающих Unit) ошибку проще проигнорировать, чем обработать.
32
38
33
39
Наконец, в Clojure (функциональном языке) выброс исключения https://www.daveliepmann.com/articles/idiomatic-clojure-errors.html[является идиоматичным] способом обработки ошибок, а Скот Влашин (автор термина ROP и один из активных пропагандистов функциональной архитектуры) https://fsharpforfunandprofit.com/posts/against-railway-oriented-programming/[рекомендует] исключения для быстрого завершения операции.
0 commit comments