Je vais traiter ces deux points en même temps car ils sont intimement liés. Le RAII est apparu pour résoudre un problème introduit par les exceptions. Oui, oui, la gestion des exceptions introduits des problèmes. Les exceptions sont ruptures de séquences, elles peuvent survenir à de nombreux endroits. Elles sont comme des GOTO mais des GOTO invisibles. Et Dieu sait si les goto (mal/trop utilisés) sont une bombe à retardement (Je ne vais pas revenir sur le célèbre article de Dijkstra Go To Statement Considered Harmful). Donc, nous avons une sorte de goto implicites. Nous pouvons avoir des sauts de quasi n'importe où dans le programme vers autre part, pire les exceptions peuvent même faire des sauts dans la pile d'appel, càd sortir de multiples appels de fonctions d'un seul coup. Cela crée énormément de points de sortie potentiel d'une fonction.
Tout structure de contrôle est un GOTO caché que ce soit le if, le while ou le for par exemple. Ce qui pose problème ce n'est pas les exceptions, c'est la gestion des exceptions par le C++. En Java le fait d'obliger à déclarer les exceptions qu'une méthode lève (mis à par les RuntimeException) réduit de beaucoup le problème de lecture du flow d’exécution. Ça permet de réellement aller vers le "je ne peux pas oublier de cas d'erreur sans l'indiquer explicitement dans mon code".
Après les exceptions posent pleins de problèmes (la performance, la gestion correct de où doit-on catcher l'exception, etc).
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: En vrac
Posté par barmic . En réponse au journal Pourquoi empaqueter KDE prend-il du temps ?. Évalué à 5.
Tout structure de contrôle est un GOTO caché que ce soit le
if, lewhileou leforpar exemple. Ce qui pose problème ce n'est pas les exceptions, c'est la gestion des exceptions par le C++. En Java le fait d'obliger à déclarer les exceptions qu'une méthode lève (mis à par lesRuntimeException) réduit de beaucoup le problème de lecture du flow d’exécution. Ça permet de réellement aller vers le "je ne peux pas oublier de cas d'erreur sans l'indiquer explicitement dans mon code".Après les exceptions posent pleins de problèmes (la performance, la gestion correct de où doit-on catcher l'exception, etc).
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)