# 🇫🇷 Type Result en Kotlin: Update
Suite à une remarque de Martial Maillot (opens new window) (puis de @davinkevin (opens new window)), il y a une méthode du type Result
bien plus appropriée et élégante: [runCatching](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/run-catching.html)
, ce qui nous donnera ceci:
fun divide(a: Int, b: Int): Result<Int> {
return Result.runCatching { a/b }
}
divide(42, 0)
.onFailure { failure -> println("😡 ${failure.message}") }
.onSuccess { result -> println("🙂 result=${result}") }
# Débats
# Exceptions
Ensuite il y a un débat à propos des exceptions:
par @CedricChampeau (opens new window)
Mon gros souci avec cette approche est que tu balances une exception pour la capturer immédiatement après: c'est une horreur en termes de flow ET de performance.
par @yannick_loiseau (opens new window)
Ca c'est du au mélange de paradigmes. Soit tu fais des exceptions tout le long, soit des types algebriques tout le long aussi. Quand c'est hybride c'est pas idéal mais c'est normal. Regarde le ! de Rust p.ex., c'est magnifique (bcp plus que ce que fait Go ama, sauf defer)
par @maillotm (opens new window)
Tout a fait, je préfère utiliser un Either perso. Par contre quand tu appelles du code java, c'est super utile !
# Either
par @dimiclarence (opens new window)
Puisque tu utilises Arrow autant utiliser le type Either<Left, Right> qui est plus approprié pour ce genre de cas, avec Left qui contient l'erreur et Right avec la value.
Alors, justement je n'utilise plus Arrow; ça me fait une dépendance en moins, surtout que j'en avais besoin pour uniquement pour un ou deux type, et avec le Result
natif ça serait dommage de s'en priver. Mais je comprend la problématique d'optimisation au niveau de la gestion des exception (mon problème est juste "esthétique", je trouve que Failure
c'est plus parlant que Left
)
# Exceptions bis
Autre remarque intéréssante par par @maillotm (opens new window)
Par contre le combo runCatching / Result est nickel pour appeler des APIs de lib java qui peuvent potentiellement remonter une exception.
# A lire
Très intéressant, ce document, notamment pour comprendre les remarques précédentes: Encapsulate successful or failed function execution (opens new window)
Continuez à gérer vos erreurs 😉
Last Articles
- 🇫🇷 Type Result en Kotlin | 2020-10-31 | Kotlin
- 🇫🇷 Type Result en Kotlin | 2020-10-31 | Kotlin
- 🇬🇧 Every GitLab Page deserves a real CI/CD | 2020-07-23 | GitLab CI
- 🇫🇷 Lit-Element, commencer doucement | 2020-07-20 | WebComponent
- 🇬🇧 Build quickly and host easily your Docker images with GitLab and GitLab CI | 2020-06-02 | GitLab CI
- 🇬🇧 Deploy quickly on Clever Cloud with GitLab CI | 2020-05-31 | GitLab CI
- 🇫🇷 Borg Collective, mes jouets pour apprendre Knative | 2020-05-30 | Knative
- 🇬🇧 Borg Collective, Toys to learn Knative | 2020-05-30 | Knative
- 🇫🇷 M5Stack, une petit device IOT bien sympathique, programmable en Python | 2020-05-09 | IOT
- 🇫🇷 Knative, l'outil qui rend Kubernetes sympathique | 2020-05-02 | kubernetes