On le voit en React pour conditionner un bout de template parce qu’on n’a pas accès aux structures de contrôle classiques: {this.state.truc && <span className="bidule" />}
Argh que je hais ce style d’écriture. Je le vois souvent dans du script shell aussi .
Alors oui ça fonctionne, mais pour moi ça ne devrait même pas exister. Ok c’est une astuce, et un moyen purement pratique de se servir des spécificité des langages/compilateur, mais justement je trouve que c’est trop dépendant du compilateur ou de l’interpréteur et que ça casse complètement « l’universalité de la logique booléenne » (désolé je vois pas comment l’exprimer autrement).
(A && B) : on est d’accord qu’il est inutile, en pratique, de tester B si A est faux. En théorie aussi d’ailleurs. Mais alors quelle règle logique stipule qu’il ne faudrait pas plutôt tester B en premier, et ne pas évaluer A si B est faux ? D’ailleurs il me semble que certains compilateur fonctionnent dans ce sens.
Normalement (A && B) == (B && A) mais avec ces utilisations il devient impossible de changer l’ordre des expression, ce que je trouve anormal.
Et accessoirement ça empêche d’écrire des trucs du style ((++A<10) && (++B<10)) si les valeurs de A et B après le test doivent être utilisées (bon ok cça peut être assez moche comme écriture mais tout à fait valable à mon sens).
Oui mais c’est quand même bien pratique d’avoir un ordre d’évaluation déterministe quand tu veux vérifier la nullité d’une référence avant de l’utiliser:
La syntaxe A && B remplace un algo de type “faire A, et si A réussit alors faire aussi B”. C’est plus synthétique que de l’écrire avec un “if”, mais ce n’est pas pour rien… En toute rigueur, c’est écrire un “if” sans “else” qui est un peu crado…
retour = faire A
si (retour OK)
alors
faire B
fin de si
Pour être honnête c’est surtout une question d’esthétique. C’est un peu comme l’opérateur ternaire vraiOuFaux ? siVrai : siFaux. Quand c’est utilisé pour les bonnes choses, et que c’est utilisé de manière consistante à travers tout un projet, ça rend le code plus facile à lire (le cerveau finit par repérer ces “motifs”).
C’est comme les goto. Les gens sont partis d’une règle générale et d’une bonne pratique “attention, ça ne s’utilise pas n’importe comment sinon ça fait du code déstructuré”, pour en faire une espèce de commandement religieux “c’est tabou si tu en utilises tu es un hérétique !”. Sauf que, quand tu as déjà fait de l’assembleur, et que tu fais du C par exemple, l’usage du goto peut rendre le code plus parlant (en ramenant tous les cas d’erreurs en fin de fonction par exemple, pour tous les avoir sous les yeux au même endroit). C’est ce que pas mal de gens du noyau Linux font.
Et encore je ne parle pas du choix entre tabulations et X espaces pour indenter, et des sous-religions qui font varier X entre 2 et 8… Tout ça pour tenir parfois en 80 colonnes sur des écrans 30 pouces en 4K ^^
En parlant d’opérateur ternaire, j’en ai trouvé 4 imbriqués sur une ligne (et combiné avec des && ) . Je crois que je suis tombé sur un codeur qui fait tout pour optimiser la place… (et qui rend tout illisible sur une ligne)
Écrire ce genre de code ça en rend souvent illisible le code et la compréhension de l’algo, on dirait que c’est pour se la péter. La seule utilité c’est effectivement dans les shells.