Path: ...!npeer.as286.net!npeer-ng0.as286.net!proxad.net!feeder1-1.proxad.net!cleanfeed3-b.proxad.net!nnrp4-1.free.fr!not-for-mail Date: Sat, 16 Sep 2023 11:32:21 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: DrPi <314@drpi.fr> Subject: Re: To except or not to except ? Newsgroups: fr.comp.lang.ada References: Content-Language: fr In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Lines: 43 Message-ID: <65057626$0$8253$426a74cc@news.free.fr> Organization: Guest of ProXad - France NNTP-Posting-Date: 16 Sep 2023 11:32:22 CEST NNTP-Posting-Host: 82.65.30.55 X-Trace: 1694856742 news-2.free.fr 8253 82.65.30.55:60510 X-Complaints-To: abuse@proxad.net Bytes: 3264 Le 15/09/2023 à 10:59, J-P. Rosen a écrit : > > En Ada, il y a les exceptions. > > Y a t-il des règles Ada à respecter/recommandées pour la gestion des > > erreurs ? > Les exceptions sont le meilleur moyen de traiter les situations... > exceptionnelles, i.e. celles qui obligent à sortir du traitement normal. > En particulier: > - On ne peut pas ignorer une exception. Si elle n'est pas traitée, elle > arrête le programme. Si un code d'erreur n'est pas testé, on continue > avec des données fausses (et C facilite ça en autorisant d'ignorer le > résultat d'une fonction). Grand principe: "il n'y a qu'une chose pire > qu'un programme qui se plante, c'est un programme qui donne des > résultats faux mais vraisemblables" > - Il y a souvent plusieurs niveaux d'appel entre celui qui diagnostique > un problème et celui capable de le traiter. Les exceptions propagent > toutes seules. Avec les codes d'erreur, chaque niveau recevant une > erreur du dessus doit recréer un code d'erreur pour le niveau du dessous Pour le fonctionnement des exceptions, c'est OK. J'ai compris le principe. A moins qu'il y ait des subtilités spécifiques à Ada. > > Par exemple, si j'ai bien compris, pour pouvoir prouver un programme, > > les exceptions sont interdites. > Dans les codes sécuritaires, les exceptions posent problème parce > qu'elles causent des débranchements cachés, d'où problème pour calculer > le nombre cyclomatique ou prouver une couverture totale. De plus, on y a > les moyens (humains, techniques et financiers) pour prouver que tous les > codes de retour sont effectivement testés. > Mais pour ceux qui n'ont ni les contraintes, ni les moyens financiers du > SIL4, je pense que les exceptions sont préférables (et à mon avis > sous-utilisées). J'ai donné cet exemple mais je ne suis pas concerné. Je code à la maison. Même si je ne désespère pas utiliser Ada au boulot (pas de SIL4 non plus). > Exemple d'utilisation hors cas d'erreur: une procédure de recherche > récursive dans une structure. Quand on a trouvé, on lève une exception > que l'on récupère au premier niveau. Cela évite une tonne de tests du > type "si le niveau du dessus a la réponse, alors on retourne au niveau > du dessous". Exemple intéressant. Je n'y aurait pas pensé. Merci Jean-Pierre.