Condition encapsulé ou EXIT_FAILURE
LInus
-
ElementW Messages postés 4814 Date d'inscription Statut Contributeur Dernière intervention -
ElementW Messages postés 4814 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Lorsqu'on test des conditions (par exemple si un fichier existe bien ou si l'utilisateur a rentré les bon arguments) qui pénalise la suite du programme si elles sont fauses, est-ce qu'il faut mieux avoir un modele comme ça :
Lorsqu'on test des conditions (par exemple si un fichier existe bien ou si l'utilisateur a rentré les bon arguments) qui pénalise la suite du programme si elles sont fauses, est-ce qu'il faut mieux avoir un modele comme ça :
ou alors comme ca :
if(condition1)
{
/* Code */
if(confition2)
{
/* Code */
if(condition3)
/* Code */
else
printf("Error\n");
}
else
printf("Error\n");
else
printf("Error\n");
Je sais que vous allez me dire que sa revient au même, mais je voulais savoir avec qu'elle solution vous coder. Je trouve que la solution 1 n'est pas très adapté à ceux qui indente de 4 à chaque nouvelle condition (comme moi), ce qui fait qu'à la fin on se retrouve avec de gros blanc en début. Mais la deuxième solution, on quite le programme avec un EXIT_FAILURE. En gros, on stop nette le programme sans le faire arriver à la fin. Donc quel est la meilleur, ou la mieux adapté à un code clair et lisible.
if(!condition1)
{
printf("Error\n");
exit(EXIT_FAILURE);
}
/* Code */
if(!condition2)
{
printf("Error\n");
exit(EXIT_FAILURE);
}
/* Code */
if(!condition3)
{
printf("Error\n");
exit(EXIT_FAILURE);
}
/* Code */
A voir également:
- Condition encapsulé ou EXIT_FAILURE
- Excel cellule couleur si condition texte - Guide
- Excel condition ou - Guide
- Excel soustraction avec condition ✓ - Forum Excel
- Excel champ calculé avec condition - Forum Excel
- Nbval avec condition - Forum Excel
3 réponses
'lut, perso je prend la 2e solution pour les mêmes raisons que toi: l'indentation excessive et une déstructuration du code en résultant.
Mais moi, je créerais plutôt une fonction pour faire le traitement, et ferait un
Mais moi, je créerais plutôt une fonction pour faire le traitement, et ferait un
returnd'un
intou autre code d'erreur (ou une exception si c'est du C++), plutôt que de quitter le programme d'office, sans avoir eu le temps de nettoyer (fermeture de fichiers,
free()s, etc); et c'est la fonction appelante qui sort le message d'erreur, et éventuellement la fonction appelée peut sortir des infos de debug.
Bonjour,
Comme gravgun, je préfère la seconde solution.
Pour moi un if tout seul, c'est un cas particulier, qui nécessite un traitement spécifique en plus du cas général. Pour une exception c'est parfait
Alors qu'un if avec un else c'est vraiment un branchement, une division en deux du cas général, ce qui est plutôt rare pour des gros morceaux de codes.
Comme gravgun, je préfère la seconde solution.
Pour moi un if tout seul, c'est un cas particulier, qui nécessite un traitement spécifique en plus du cas général. Pour une exception c'est parfait
Alors qu'un if avec un else c'est vraiment un branchement, une division en deux du cas général, ce qui est plutôt rare pour des gros morceaux de codes.
Bonjour,
Clairement la deuxième, sinon tu ne peux pas faire une bonne gestion des erreurs.
Mais, il y a d'autres variantes plus propres.
Déjà, il faut savoir qu'il y a deux théories : SESE (Single Entry Single Exit) vs SEME(Single Entry Multiple Exits).
Les deux se tiennent.
Ensuite, tu peux également utiliser goto pour ne pas trop complexifier le code.
Ce qui donnerait par exemple (en reprenant exactement ton exemple) :
Bien sûr, tu peux (et tu n'auras pas le choix dans des cas plus compliqués) traiter tes erreurs différemment selon les conditions.
Cdlt,
Clairement la deuxième, sinon tu ne peux pas faire une bonne gestion des erreurs.
Mais, il y a d'autres variantes plus propres.
Déjà, il faut savoir qu'il y a deux théories : SESE (Single Entry Single Exit) vs SEME(Single Entry Multiple Exits).
Les deux se tiennent.
Ensuite, tu peux également utiliser goto pour ne pas trop complexifier le code.
Ce qui donnerait par exemple (en reprenant exactement ton exemple) :
int fin=0; if (! condition1) goto erreur; if (! condition2) goto erreur; if (! condition3) goto erreur; fin=1; if (! fin) { /*ici tu gères tes erreurs*/ if (!condition1 || !condition2 || !condition3) { fputs("Error\n", stderr); } } return ...;
Bien sûr, tu peux (et tu n'auras pas le choix dans des cas plus compliqués) traiter tes erreurs différemment selon les conditions.
Cdlt,