GNT sans publicité, site mobile, fonctionnalitées exclusives...

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
Lire les 33 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 7
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Harpo
Le #1011064
Pierre Maurette wrote:


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.


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/

Emmanuel Delahaye
Le #1010718
<présentation opérateurs ternaires>

1 ligne, pas de problèmes si il n'y en a qu'un... Par contre, si il y en
a plusieurs :

Sur plusieurs lignes, par exemple:
running_ = status == 0 ?
false
:
status == 1 ?
true
:
!running_
;


A trop forcer le trait, on se décrédibilise...

running_ = status == 0
? false
: status == 1
? true
: !running_;

--
A+

Emmanuel Delahaye

Pierre Maurette
Le #1010717
<présentation opérateurs ternaires>

1 ligne, pas de problèmes si il n'y en a qu'un... Par contre, si il y en a
plusieurs :

Sur plusieurs lignes, par exemple:
running_ = status == 0 ?
false
:
status == 1 ?
true
:
!running_
;


A trop forcer le trait, on se décrédibilise...


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é.

running_ = status == 0
? false
: status == 1
? true
: !running_;


Il n'y a pas un petit souci dans ton indentation ?

--
Pierre Maurette


Emmanuel Delahaye
Le #1010715
running_ = status == 0
? false
: status == 1
? true
: !running_;


Il n'y a pas un petit souci dans ton indentation ?


C'est possible, mais je ne vois rien. Au lieu de jouer aux devinettes,
donne ta version...

--
A+

Emmanuel Delahaye


Pierre Maurette
Le #1010714
running_ = status == 0
? false
: status == 1
? true
: !running_;


Il n'y a pas un petit souci dans ton indentation ?


C'est possible, mais je ne vois rien. Au lieu de jouer aux devinettes, donne
ta version...


running_ = status == 0
? false
: status == 1
? true
: !running_;

--
Pierre Maurette



Publicité
Suivre les réponses
Poster une réponse
Anonyme