Opérateur ternaire, indenter ?
Le
Pierre Maurette
Bonjour,
J'infidélise actuellement pas mal du coté de Php et Java. Je me rends
compte à cette occasion de l'intérêt de l'opérateur ternaire, qui est
peut-être mal vendu en C.
On peut le trouver peu lisible, mais il suffit de s'y mettre et
l'investissement est rentable, vu qu'il a la même syntaxe et le même
comportement en C, C++, Php, Java et quelques autres "C inspired" sans
doute.
Ce que j'apprécie, c'est qu'il s'agit d'un *opérateur*, avec les
possibilités qu'offre l'évaluation économique garantie.
C'est sur le style que j'aimeerais avoir des avis. J'ai lu ici que
certain guru préférait développer en plusieurs lignes.
A partir de cette expression:
running_ = status == 0 ? false : status == 1 ? true : !running_;
je peux faire:
running_ = (status == 0) ? false : (status == 1) ? true : !running_;
(parenthésage sytématique des conditions)
ou (ma préférée peut-être)
running_ = (status == 0 ? false : (status == 1 ? true : !running_));
(parenthésage sytématique de l'opérateur ternaire)
ou les deux:
running_ = ((status == 0) ? false : ((status == 1) ? true :
!running_));
Sur plusieurs lignes, par exemple:
running_ = status == 0 ?
false
:
status == 1 ?
true
:
!running_
;
Je n'aime pas trop la présentation sur plusieurs lignes, au motif
qu'elle masque l'aspect opérateur et donne l'idée d'une instruction de
contrôle de flux.
Des avis ? Merci d'avance .
--
Pierre Maurette
J'infidélise actuellement pas mal du coté de Php et Java. Je me rends
compte à cette occasion de l'intérêt de l'opérateur ternaire, qui est
peut-être mal vendu en C.
On peut le trouver peu lisible, mais il suffit de s'y mettre et
l'investissement est rentable, vu qu'il a la même syntaxe et le même
comportement en C, C++, Php, Java et quelques autres "C inspired" sans
doute.
Ce que j'apprécie, c'est qu'il s'agit d'un *opérateur*, avec les
possibilités qu'offre l'évaluation économique garantie.
C'est sur le style que j'aimeerais avoir des avis. J'ai lu ici que
certain guru préférait développer en plusieurs lignes.
A partir de cette expression:
running_ = status == 0 ? false : status == 1 ? true : !running_;
je peux faire:
running_ = (status == 0) ? false : (status == 1) ? true : !running_;
(parenthésage sytématique des conditions)
ou (ma préférée peut-être)
running_ = (status == 0 ? false : (status == 1 ? true : !running_));
(parenthésage sytématique de l'opérateur ternaire)
ou les deux:
running_ = ((status == 0) ? false : ((status == 1) ? true :
!running_));
Sur plusieurs lignes, par exemple:
running_ = status == 0 ?
false
:
status == 1 ?
true
:
!running_
;
Je n'aime pas trop la présentation sur plusieurs lignes, au motif
qu'elle masque l'aspect opérateur et donne l'idée d'une instruction de
contrôle de flux.
Des avis ? Merci d'avance .
--
Pierre Maurette

Poser une question


Je n'aime pas non plus, l'intérêt de l'opérateur ternaire est qu'il
apporte de la concision, en 1 ligne et en 1 coup d'oeil tu vois ce que
cela fait.
Se forcer à mettre ça sur plusieurs lignes, c'est lui enlever son
intérêt. James Kanze est plutôt du genre à le mettre, même sans
imbrication, sur plusieurs lignes suivant un de ses posts récent, je
trouve que, exceptionnelement de sa part, ce n'est pas un bon avis.
L'intérêt est pour moi la concision, c'est tout, je ne pense pas que les
imbriquer apporte àdela concison de manière suffisante, sauf si c'est
simple et tient en 1 ligne, sinon il vaut mieux mettre des if/else,
c'est plus simple.
Après pour moi ça devient compliqué et je pense à ceux qui sont comme
moi.
Pour récapituler, lorsqu'on a besoin de plusieurs lignes, c'est une
utilisation dévoyée.
--
http://patrick.davalan.free.fr/
1 ligne, pas de problèmes si il n'y en a qu'un... Par contre, si il y en
a plusieurs :
A trop forcer le trait, on se décrédibilise...
running_ = status == 0
? false
: status == 1
? true
: !running_;
--
A+
Emmanuel Delahaye
C'est ce que j'appelle le syndrome de l'écologiste. Surargamentation
systématique, vouloir absolument que toutes les croix soient du même
coté.
Il n'y a pas un petit souci dans ton indentation ?
--
Pierre Maurette
C'est possible, mais je ne vois rien. Au lieu de jouer aux devinettes,
donne ta version...
--
A+
Emmanuel Delahaye
running_ = status == 0
? false
: status == 1
? true
: !running_;
--
Pierre Maurette