En tant que programmeur Java, j'ai toujours critiqué les exceptions non vérifiées. La plupart du temps, les programmeurs l'utilisent comme moyen de faciliter la programmation pour créer des problèmes plus tard. De plus, les programmes (bien que désordonnés) avec des exceptions vérifiées sont beaucoup plus robustes que leurs homologues non contrôlés.
Étonnamment à Scala, il n'y a rien qui s'appelle des exceptions vérifiées. Tous les Java cochés et décochés ne le sont pas dans Scala.
Quelle est la motivation derrière cette décision? Pour moi, cela ouvre un large éventail de problèmes lors de l'utilisation de tout code externe. Et si par hasard la documentation est médiocre, cela se traduit par KILL.
Réponses:
Les exceptions vérifiées sont généralement considérées comme un échec. Notez qu'aucun langage créé après Java ne les a adoptés. Voir http://www.artima.com/intv/handcuffs2.html , http://googletesting.blogspot.ru/2009/09/checked-exceptions-i-love-you-but-you.html , http: / /www.mindview.net/Etc/Discussions/CheckedExceptions , etc.
En particulier, ils sont impossibles (sauf en revenant à
throws Exception
).Dans Scala vous avez une meilleure option: utiliser les types algébriques pour les valeurs de rendement telles que
Option[T]
,Either[Exception, T]
, votre propre type quand vous voulez que l'utilisateur pour traiter les cas de spécifiques (par exemple , au lieu devous avez
et le consommateur doit maintenant gérer tous les résultats)
Pour gérer le code externe qui lève des exceptions, vous avez
scala.util.control.exception
ouscala.util.Try
(à partir de Scala 2.10).la source
try..catch
semble beaucoup plus lisible queif
. De plus, je peux également garantir que la même plupart des développeurs n'écriront pas de code qui renvoie un résultat d'erreur - trop compliqué dans Scala - vous ne pouvez même pas revenir d'une fonction quand vous le souhaitez (tout comme dans Pascal)Les exceptions vérifiées en Java ne sont pas une si mauvaise chose. Bien sûr, les ADT peuvent être une meilleure option pour Scala, mais en Java, les exceptions vérifiées ont leur place et l' argument de code bien rangé est tout simplement insensé, peu importe le nombre de blogs qui le répètent. Il dit essentiellement que vous devez joyeusement ignorer les conditions graves et éventuellement réparables qui peuvent se produire dans votre système, car le système de type à vis, un joli code rend votre système robuste de manière automatique. Un tel raisonnement explique aussi pourquoi tant de programmeurs Java se déplacent volontairement leur code dans XMLs (Spring, Maven, etc. Je manque la jolie partie ici même).
La raison de l'absence d'exceptions vérifiées dans Scala donnée par M. Odersky ci-dessous http://www.scala-lang.org/old/node/8787.html est sans surprise différente et logique.
Pas sûr, mais je pense que les lambdas Java 8 sont également limités à des exceptions non vérifiées.Les méthodes de la plupart (toutes?) Des nouvelles interfaces fonctionnelles de JDK 8 (java.util.function.*
) ne déclarent pas non plus d'exceptions non contrôlées.la source
Si vous voulez gagner en efficacité, vous devez abandonner .. précision / contrôle <- J'ai besoin d'un meilleur mot pour ça.
Scala est située vers le haut en ce qui concerne l'abstraction. Si l'un des objectifs de Scala est de se débarrasser du code passe-partout ennuyeux, alors la gestion des exceptions de Java est évidente. Si vous voulez écrire du code rapide en java, continuez de lever vos exceptions vérifiées jusqu'à ce qu'elles frappent
main()
et deviennent effectivement non vérifiées .Je ne sais pas si j'arrive exactement à ce que vous demandez, mais c'est la raison la plus évidente à mon avis.
Eh bien, j'ai fait une petite recherche et quelqu'un a écrit sur la tragédie des exceptions de chèques .
la source