Gestion des erreurs
Mar 30 Aoû - 16:35
Bonjour,
Réf. : https://les-mathematiques.net/vanilla/index.php?p=/discussion/2331389/bonne-pratique-pour-ecrire-une-fonction
C'est une question très intéressant, mais le réponse ne peut pas se faire en trois phrases.
Il y a plusieurs raisons. Par exemple, une fonction peut ne jamais produire d'erreur, par exemple calcul de distance entre 2 points. C'est avant l'appel de la fonction qu'il faut tester la validité des points.
Il y a des fonctions qui renvoient une valeur, résultat d'un calcul, d'autres qui interviennent sur des données extérieures, auquel cas, il est bien préférable de travailler sur une copie et renvoyer un code de résultat qui sera testé au retour de la fonction, il y a des fonctions récursives, le code retour est alors la fin de la récurrence.
Il y a des cas où il faut prévoir un "état du traitement" en variable globale de façon à pouvoir terminer le processus en cas d'erreur.
Bref, il y a, à mon avis, autant de réponses possibles que de contextes. Je dirais même qu'il est dangereux de se fixer une règle générale, sauf si on a parfaitement analysé le cas des erreurs et décrit et listé tous les contextes possibles et la conduite à tenir.
Il ne faut oublier le cas où l'erreur peut être apparente ou momentanée, c'est encore un cas particulier.
Réf. : https://les-mathematiques.net/vanilla/index.php?p=/discussion/2331389/bonne-pratique-pour-ecrire-une-fonction
C'est une question très intéressant, mais le réponse ne peut pas se faire en trois phrases.
Il y a plusieurs raisons. Par exemple, une fonction peut ne jamais produire d'erreur, par exemple calcul de distance entre 2 points. C'est avant l'appel de la fonction qu'il faut tester la validité des points.
Il y a des fonctions qui renvoient une valeur, résultat d'un calcul, d'autres qui interviennent sur des données extérieures, auquel cas, il est bien préférable de travailler sur une copie et renvoyer un code de résultat qui sera testé au retour de la fonction, il y a des fonctions récursives, le code retour est alors la fin de la récurrence.
Il y a des cas où il faut prévoir un "état du traitement" en variable globale de façon à pouvoir terminer le processus en cas d'erreur.
Bref, il y a, à mon avis, autant de réponses possibles que de contextes. Je dirais même qu'il est dangereux de se fixer une règle générale, sauf si on a parfaitement analysé le cas des erreurs et décrit et listé tous les contextes possibles et la conduite à tenir.
Il ne faut oublier le cas où l'erreur peut être apparente ou momentanée, c'est encore un cas particulier.
Re: Gestion des erreurs
Mar 30 Aoû - 16:48
Là j'applaudis des deux mains.Raoul.S a écrit:En gros les fonctions doivent être des boîtes noires pour celui qui les utilise, on sait le type de données qu'elles renvoient et les exceptions qu'elles lèvent mais pas leur fonctionnement interne.
Personnellement, j'ai très peu utilisé la procédure Try ... Catch ... Except. En fait, je crois que je l'ai limité à des très localisés, c'est à dire des bugs que je n'arrivais pas reproduire. Le principe est que si ça se reproduit, j'aurais au moins une piste de recherche. Ce genre de phénomène est rare.
Je continue :
Ce cas est classique, mais il faut en parler. Si on fait une division par 0, la machine va s'en rendre compte et l'exécution s'arrêtera. Par contre, si le code fait une division par 0, c'est qu'il y a une faute d'analyse. C'est le boulot du programmeur d'écrire un bon code, résultat d'une bonne analyse, et non à la machine de le tester. La division par 0 n'est pas une faute de calcul mais une faute d'analyse.Je ne sais pas si j'utilise exactement le bon vocabulaire, mais son texte tourne autour d'une fonction qui peut lever l'exception "division par 0".
A mon avis, le problème du test d'erreur est important pour les extensions futures, utilisation de fonctions déjà écrites. C'est ça qu'il faut avoir en tête.
Re: Gestion des erreurs
Mar 30 Aoû - 17:12
- Code:
$name = "monDossier/*.bmp";
$images = scandir($name);
foreach ($images as $image) {
// traitement
}
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|