Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/06/2017, à 07:54

Arbiel

Programmation instructions conditionnelles

Bonjour à tous

J'ai tendance à écrire

[ condition ] && {liste d'instructions;} || {liste d'instructions;}

et non pas

if [ condition ]; then liste d'instructions else liste d'instructions fi;

Qu'en pensent les experts, tant au niveau des standards de programmation, que de la clarté du code et de son efficacité ? Pour la clarté du code, il faut prendre en compte les retours à la ligne et l'indentation des lignes que les deux écritures peuvent utiliser de manière identique.

Merci d'avance.

Arbiel
,


Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.

Hors ligne

#2 Le 29/06/2017, à 09:43

erresse

Re : Programmation instructions conditionnelles

Bonjour,

À mon sens, les deux méthodes sont évidemment équivalentes sur le plan de l'efficacité (quoique le code étant interprété, moins il y a de termes, plus rapide est l'exécution, à quelques pouillèmes près)...
Toutefois, sur le plan de la lisibilité, la méthode "condensée" est moins évidente, surtout que les instructions standard pour un test sont toujours données en termes de "if <condition>; then <action-oui>; else <action-non>; fi" pour un codage en "langage naturel".
C'est cette syntaxe que l'on enseigne aux débutants et je pense qu'elle est plus abordable, au moins dans un premier temps.

De toute manière, en comparaison de la syntaxe de certains autres langages, le bash reste très accessible, c'est un peu comme comparer un programme en basic avec son homologue en C !
smile


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#3 Le 29/06/2017, à 11:08

Watael

Re : Programmation instructions conditionnelles

attention :

$ [ true ] && { false; echo true; } || { true; echo wrong;}
true
$ [ true ] && { echo true; false; } || { true; echo wrong;}
true
wrong

les accolades regroupent les commandes, mais n'isolent pas complètement les structures conditionnelles, contrairement au if; then; else...fi :

$ if [ true ]; then echo true; false; else true; echo wrong; fi
true

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#4 Le 29/06/2017, à 13:32

Arbiel

Re : Programmation instructions conditionnelles

Merci pour vos réponses. Les deux écritures ne sont donc pas équivalentes comme le montre l'exemple de Watael.

Il faut donc que je revienne sur mon habitude, qui, un jour ou l'autre, pourra me poser d'importantes difficultés de mise au point si j'oublie (puisque je risque d'oublier) que "||" teste le code retour de l'instruction précédemment exécutée, et non celui de l'instruction qui précède le "&&" initial.

Sauf à écrire

[ condition ] && {liste d'instructions; true; } || {liste d'instructions;}

qui ne présente plus qu'un très mince avantage de frappe, mais une instruction de plus.
Arbiel

Dernière modification par Arbiel (Le 29/06/2017, à 13:38)


Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.

Hors ligne

#5 Le 29/06/2017, à 16:19

Hizoka

Re : Programmation instructions conditionnelles

Salut,

perso je fais toujours if, then, else, fi sauf dans le cas d'une simple vérification avec une seule commande derriere.
Ce qui fait que ça reste toujours lisible.

[[ ${exit} ]] && exit 1

KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne