Kotlin implémente la gestion des exceptions de manière similaire à Java, mais avec des différences importantes. En Kotlin, on utilise les constructions familières try, catch et finally, mais la différence fondamentale est que Kotlin n'a pas d'exceptions checked. Cela signifie que toutes les exceptions (erreurs d'exécution) sont considérées comme unchecked — il n'est pas nécessaire de les déclarer dans la signature de la fonction et de les intercepter explicitement.
finally s'exécute toujours, même si une exception est levée.try, c'est-à-dire que try peut être utilisé comme une expression, renvoyant un résultat.try/catch pour le contrôle de flux — utilisez-les uniquement pour des situations vraiment exceptionnelles.fun parseIntOrNull(str: String): Int? = try { str.toInt() } catch (e: NumberFormatException) { null }
use pour la fermeture automatique (par exemple, fichiers).En Kotlin, faut-il indiquer dans la signature de la fonction quelles exceptions elle peut lever (comme en Java — via throws) ?
Réponse correcte : Non, en Kotlin, il n'y a pas de mécanisme pour les exceptions checked. Toutes les exceptions sont unchecked. Il n'existe pas de syntaxe throws dans la signature de la fonction (L'exception est l'annotation @Throws pour la compatibilité avec Java, uniquement pour l'interopérabilité).
Histoire
Dans un projet, nous avons migré un code Java utilisant des exceptions checked (par exemple,
IOException). Après la migration vers Kotlin, le développeur a oublié de gérer l'exception lors de la manipulation de fichiers — l'application a commencé à planter sur des fichiers réels, car personne ne gérait les erreurs IO, pensant que le compilateur avertirait, comme en Java.
Histoire
Un membre de l'équipe a erronément utilisé try/catch pour le contrôle de flux et a ralenti l'analyse des logs (il a attrapé NumberFormatException pour chaque ligne invalide — les performances ont chuté de manière significative avec un grand volume de données).
Histoire
Dans un projet pour la JVM via Kotlin, du code Java a été appelé, qui déclarait des exceptions checked (
throws). Le code Kotlin ne gérait pas les exceptions, pensant que "tout est unchecked" — en conséquence, une erreur critique est passée inaperçue jusqu'à un incident en production.