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_;
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.
running_ = status == 0 // j'aurais mis des parenthèses inutiles ? false : status == 1 ? true : !running_;
Je pense que lasolution suivante est plus acceptable car elle donne plus de concision ce qui est le seul intérêt de l'operateur ternaire.
running_ = status == 0 ? false : status == 1 ? true : !running_;
voire même :
running_ = status == 0 ? false : status == 1 ? true : !running_;
ou encore, pour pouvoir systématiser pour un niveau d'imbrication n :
running_ = status == 0 ? false : status == 1 ? true : !running_;
Mais il me semble que le dernier niveau d'imbrication devrait tenir sur une ligne (s'il reste de la place) et donc la solution précédente me semble la meilleure.
-- http://patrick.davalan.free.fr/
Harpo wrote:
Pourquoi pas aussi :
running_ = status == 0 // j'aurais mis des parenthèses inutiles
? false
: status == 1
? true
: !running_;
Je pense que lasolution suivante est plus acceptable car elle donne plus
de concision ce qui est le seul intérêt de l'operateur ternaire.
running_ = status == 0
? false
: status == 1 ? true : !running_;
voire même :
running_ = status == 0 ? false
: status == 1 ? true : !running_;
ou encore, pour pouvoir systématiser pour un niveau d'imbrication n :
running_ = status == 0 ? false
: status == 1 ? true
: !running_;
Mais il me semble que le dernier niveau d'imbrication devrait tenir sur
une ligne (s'il reste de la place) et donc la solution précédente me
semble la meilleure.
running_ = status == 0 // j'aurais mis des parenthèses inutiles ? false : status == 1 ? true : !running_;
Je pense que lasolution suivante est plus acceptable car elle donne plus de concision ce qui est le seul intérêt de l'operateur ternaire.
running_ = status == 0 ? false : status == 1 ? true : !running_;
voire même :
running_ = status == 0 ? false : status == 1 ? true : !running_;
ou encore, pour pouvoir systématiser pour un niveau d'imbrication n :
running_ = status == 0 ? false : status == 1 ? true : !running_;
Mais il me semble que le dernier niveau d'imbrication devrait tenir sur une ligne (s'il reste de la place) et donc la solution précédente me semble la meilleure.
-- http://patrick.davalan.free.fr/
Emmanuel Delahaye
Copié/collé de Google Groups: <cit> A trop forcer le trait, on se décrédibilise...
running_ = status == 0 ? false : status == 1 ? true : !running_; </cit>
Copié/collé de MesNews: <cit> A trop forcer le trait, on se décrédibilise...
running_ = status == 0 ? false : status == 1 ? true : !running_; </cit>
Je ne vois aucune différence, tout est bien indenté comme il faut.
Décidément, je n'arrive pas à comprendre ce que tu n'aimes pas dans mon code.
-- A+
Emmanuel Delahaye
Copié/collé de Google Groups:
<cit>
A trop forcer le trait, on se décrédibilise...
running_ = status == 0
? false
: status == 1
? true
: !running_;
</cit>
Copié/collé de MesNews:
<cit>
A trop forcer le trait, on se décrédibilise...
running_ = status == 0
? false
: status == 1
? true
: !running_;
</cit>
Je ne vois aucune différence, tout est bien indenté comme il faut.
Décidément, je n'arrive pas à comprendre ce que tu n'aimes pas dans mon
code.
"Simias" a écrit dans le message de news: 445dfba5$0$23118$
euh... on perd pas tout l'interet du ternaire la? je veux dire, c'est utilise pour la conscision en general.
c'est quoi l'interet de la concision ?
J'ajouterais egalement qu'un autre interet du ternaire c'est de pouvoir le mettre dans un appel de fonction:
tu pars à la retraite, on doit jeter ton code...
Simias
Stephane Legras-Decussy wrote:
"Simias" a écrit dans le message de news: 445dfba5$0$23118$
euh... on perd pas tout l'interet du ternaire la? je veux dire, c'est utilise pour la conscision en general.
c'est quoi l'interet de la concision ?
Cela peut parfois contribuer a rendre du code plus lisible en ne l'alourdissant pas avec des 'if', meme si on cours le risque d'obtenir l'effet inverse a en abuser.
J'ajouterais egalement qu'un autre interet du ternaire c'est de pouvoir le mettre dans un appel de fonction:
tu pars à la retraite, on doit jeter ton code...
Pourquoi cela? Suis-je si mauvais codeur?
-- Simias
Stephane Legras-Decussy wrote:
"Simias" <simias.n@gmail.com> a écrit dans le message de news:
445dfba5$0$23118$626a54ce@news.free.fr...
euh... on perd pas tout l'interet du ternaire la? je veux dire, c'est
utilise pour la conscision en general.
c'est quoi l'interet de la concision ?
Cela peut parfois contribuer a rendre du code plus lisible en ne
l'alourdissant pas avec des 'if', meme si on cours le risque d'obtenir
l'effet inverse a en abuser.
J'ajouterais egalement qu'un autre interet du ternaire c'est de pouvoir le
mettre dans un appel de fonction:
"Simias" a écrit dans le message de news: 445dfba5$0$23118$
euh... on perd pas tout l'interet du ternaire la? je veux dire, c'est utilise pour la conscision en general.
c'est quoi l'interet de la concision ?
Cela peut parfois contribuer a rendre du code plus lisible en ne l'alourdissant pas avec des 'if', meme si on cours le risque d'obtenir l'effet inverse a en abuser.
J'ajouterais egalement qu'un autre interet du ternaire c'est de pouvoir le mettre dans un appel de fonction:
tu pars à la retraite, on doit jeter ton code...
Pourquoi cela? Suis-je si mauvais codeur?
-- Simias
Jean-Claude Arbaut
Simias wrote:
Stephane Legras-Decussy wrote:
"Simias" a écrit dans le message de news: 445dfba5$0$23118$
euh... on perd pas tout l'interet du ternaire la? je veux dire, c'est utilise pour la conscision en general.
c'est quoi l'interet de la concision ?
Tu as entendu parler d'Ada ;-)
Simias wrote:
Stephane Legras-Decussy wrote:
"Simias" <simias.n@gmail.com> a écrit dans le message de news:
445dfba5$0$23118$626a54ce@news.free.fr...
euh... on perd pas tout l'interet du ternaire la? je veux dire, c'est
utilise pour la conscision en general.
"Simias" a écrit dans le message de news: 445dfba5$0$23118$
euh... on perd pas tout l'interet du ternaire la? je veux dire, c'est utilise pour la conscision en general.
c'est quoi l'interet de la concision ?
Tu as entendu parler d'Ada ;-)
Harpo
Stephane Legras-Decussy wrote:
"Simias" a écrit dans le message de news: 445dfba5$0$23118$
euh... on perd pas tout l'interet du ternaire la? je veux dire, c'est utilise pour la conscision en general.
c'est quoi l'interet de la concision ?
Je pense que quelque chose de simple doit s'écrire simplement sans prendre beaucoup de lignes, cela évite de browser des pages d'une fonction avant de se rende compte qu'elle ne fait pas grand chose.
J'ajouterais egalement qu'un autre interet du ternaire c'est de pouvoir le mettre dans un appel de fonction:
tu pars à la retraite, on doit jeter ton code...
On peut mettre une expression à n'importe quel endroit où c'est autorisé par la syntaxe du langage, le ternaire n'y échappe pas, il faut sans doute éviter trop de niveaux d'imbrication mais cela peut éviter des étapes et variables intermédiaires qui n'apportent pas toujours grand chose à la compréhension, C'est aussi une question d'appréciation de la difficulté de relire un code.
Il n'est pas non plus interdit d'écrire en Cobol, le code sera peut-être dans le meilleur des cas jeté avant la retraite.
-- http://patrick.davalan.free.fr/
Stephane Legras-Decussy wrote:
"Simias" <simias.n@gmail.com> a écrit dans le message de news:
445dfba5$0$23118$626a54ce@news.free.fr...
euh... on perd pas tout l'interet du ternaire la? je veux dire, c'est
utilise pour la conscision en general.
c'est quoi l'interet de la concision ?
Je pense que quelque chose de simple doit s'écrire simplement sans
prendre beaucoup de lignes, cela évite de browser des pages d'une
fonction avant de se rende compte qu'elle ne fait pas grand chose.
J'ajouterais egalement qu'un autre interet du ternaire c'est de
pouvoir le mettre dans un appel de fonction:
tu pars à la retraite, on doit jeter ton code...
On peut mettre une expression à n'importe quel endroit où c'est autorisé
par la syntaxe du langage, le ternaire n'y échappe pas, il faut sans
doute éviter trop de niveaux d'imbrication mais cela peut éviter des
étapes et variables intermédiaires qui n'apportent pas toujours grand
chose à la compréhension, C'est aussi une question d'appréciation de la
difficulté de relire un code.
Il n'est pas non plus interdit d'écrire en Cobol, le code sera peut-être
dans le meilleur des cas jeté avant la retraite.
"Simias" a écrit dans le message de news: 445dfba5$0$23118$
euh... on perd pas tout l'interet du ternaire la? je veux dire, c'est utilise pour la conscision en general.
c'est quoi l'interet de la concision ?
Je pense que quelque chose de simple doit s'écrire simplement sans prendre beaucoup de lignes, cela évite de browser des pages d'une fonction avant de se rende compte qu'elle ne fait pas grand chose.
J'ajouterais egalement qu'un autre interet du ternaire c'est de pouvoir le mettre dans un appel de fonction:
tu pars à la retraite, on doit jeter ton code...
On peut mettre une expression à n'importe quel endroit où c'est autorisé par la syntaxe du langage, le ternaire n'y échappe pas, il faut sans doute éviter trop de niveaux d'imbrication mais cela peut éviter des étapes et variables intermédiaires qui n'apportent pas toujours grand chose à la compréhension, C'est aussi une question d'appréciation de la difficulté de relire un code.
Il n'est pas non plus interdit d'écrire en Cobol, le code sera peut-être dans le meilleur des cas jeté avant la retraite.
-- http://patrick.davalan.free.fr/
Pierre Maurette
Harpo wrote:
Pourquoi pas aussi :
running_ = status == 0 // j'aurais mis des parenthèses inutiles ? false : status == 1 ? true : !running_;
Je pense que lasolution suivante est plus acceptable car elle donne plus de concision ce qui est le seul intérêt de l'operateur ternaire.
running_ = status == 0 ? false : status == 1 ? true : !running_;
voire même :
running_ = status == 0 ? false : status == 1 ? true : !running_;
ou encore, pour pouvoir systématiser pour un niveau d'imbrication n :
running_ = status == 0 ? false : status == 1 ? true : !running_;
Mais il me semble que le dernier niveau d'imbrication devrait tenir sur une ligne (s'il reste de la place) et donc la solution précédente me semble la meilleure.
Personnellement, je ne trouve aucun sens à indenter par rapport au début de la ligne qui peut justement être n'importe quoi. Ma logique voudrait qu'on le fasse (éventuellement à 0, alignement) par rapport au début de la condition ou au signe ?, l'important étant que les deux résultats soient alignés. Mais je préfère ne pas indenter et conserver tout le caractère opérateur. Comme pour le
if {} else if {} else if {} else {}
qui s'écrit mécaniquement mais n'est pas "évident" au début, on peut généraliser :
cond1 ? a : cond2 ? b : ..... : condn ? x : y ;
ou alors :
cond1 ? a : cond2 ? b : ..... : condn ? x : y ;
?
-- Pierre Maurette
Harpo wrote:
Pourquoi pas aussi :
running_ = status == 0 // j'aurais mis des parenthèses inutiles
? false
: status == 1
? true
: !running_;
Je pense que lasolution suivante est plus acceptable car elle donne plus
de concision ce qui est le seul intérêt de l'operateur ternaire.
running_ = status == 0
? false
: status == 1 ? true : !running_;
voire même :
running_ = status == 0 ? false
: status == 1 ? true : !running_;
ou encore, pour pouvoir systématiser pour un niveau d'imbrication n :
running_ = status == 0 ? false
: status == 1 ? true
: !running_;
Mais il me semble que le dernier niveau d'imbrication devrait tenir sur
une ligne (s'il reste de la place) et donc la solution précédente me
semble la meilleure.
Personnellement, je ne trouve aucun sens à indenter par rapport au
début de la ligne qui peut justement être n'importe quoi. Ma logique
voudrait qu'on le fasse (éventuellement à 0, alignement) par rapport au
début de la condition ou au signe ?, l'important étant que les deux
résultats soient alignés.
Mais je préfère ne pas indenter et conserver tout le caractère
opérateur.
Comme pour le
if {}
else if {}
else if {}
else {}
qui s'écrit mécaniquement mais n'est pas "évident" au début, on peut
généraliser :
running_ = status == 0 // j'aurais mis des parenthèses inutiles ? false : status == 1 ? true : !running_;
Je pense que lasolution suivante est plus acceptable car elle donne plus de concision ce qui est le seul intérêt de l'operateur ternaire.
running_ = status == 0 ? false : status == 1 ? true : !running_;
voire même :
running_ = status == 0 ? false : status == 1 ? true : !running_;
ou encore, pour pouvoir systématiser pour un niveau d'imbrication n :
running_ = status == 0 ? false : status == 1 ? true : !running_;
Mais il me semble que le dernier niveau d'imbrication devrait tenir sur une ligne (s'il reste de la place) et donc la solution précédente me semble la meilleure.
Personnellement, je ne trouve aucun sens à indenter par rapport au début de la ligne qui peut justement être n'importe quoi. Ma logique voudrait qu'on le fasse (éventuellement à 0, alignement) par rapport au début de la condition ou au signe ?, l'important étant que les deux résultats soient alignés. Mais je préfère ne pas indenter et conserver tout le caractère opérateur. Comme pour le
if {} else if {} else if {} else {}
qui s'écrit mécaniquement mais n'est pas "évident" au début, on peut généraliser :
cond1 ? a : cond2 ? b : ..... : condn ? x : y ;
ou alors :
cond1 ? a : cond2 ? b : ..... : condn ? x : y ;
?
-- Pierre Maurette
Pierre Maurette
Copié/collé de Google Groups: <cit> A trop forcer le trait, on se décrédibilise...
running_ = status == 0 ? false : status == 1 ? true : !running_; </cit>
Copié/collé de MesNews: <cit> A trop forcer le trait, on se décrédibilise...
running_ = status == 0 ? false : status == 1 ? true : !running_; </cit>
Je ne vois aucune différence, tout est bien indenté comme il faut.
Il n'y a aucune différence entre les deux copies ci-dessus, puisqu'elles sont conformes et du même texte. Le but était juste de montrer que les espaces navaient pas "sauté chez moi" comme sugéré.
Décidément, je n'arrive pas à comprendre ce que tu n'aimes pas dans mon code.
Tant qu'à indenter, j'aime plutôt. Mais néanmoins il y a une erreur, une typo sans doute. Quelle règle cohérente peut amener à aligner le premier ? sous le 'a' de "status" et le second sous le 's' de "status" ? Il n'y a pas de style unique, mais je n'en vois aucun qui arrive à ce résultat.
-- Pierre Maurette
Copié/collé de Google Groups:
<cit>
A trop forcer le trait, on se décrédibilise...
running_ = status == 0
? false
: status == 1
? true
: !running_;
</cit>
Copié/collé de MesNews:
<cit>
A trop forcer le trait, on se décrédibilise...
running_ = status == 0
? false
: status == 1
? true
: !running_;
</cit>
Je ne vois aucune différence, tout est bien indenté comme il faut.
Il n'y a aucune différence entre les deux copies ci-dessus,
puisqu'elles sont conformes et du même texte. Le but était juste de
montrer que les espaces navaient pas "sauté chez moi" comme sugéré.
Décidément, je n'arrive pas à comprendre ce que tu n'aimes pas dans mon code.
Tant qu'à indenter, j'aime plutôt.
Mais néanmoins il y a une erreur, une typo sans doute. Quelle règle
cohérente peut amener à aligner le premier ? sous le 'a' de "status" et
le second sous le 's' de "status" ? Il n'y a pas de style unique, mais
je n'en vois aucun qui arrive à ce résultat.
Copié/collé de Google Groups: <cit> A trop forcer le trait, on se décrédibilise...
running_ = status == 0 ? false : status == 1 ? true : !running_; </cit>
Copié/collé de MesNews: <cit> A trop forcer le trait, on se décrédibilise...
running_ = status == 0 ? false : status == 1 ? true : !running_; </cit>
Je ne vois aucune différence, tout est bien indenté comme il faut.
Il n'y a aucune différence entre les deux copies ci-dessus, puisqu'elles sont conformes et du même texte. Le but était juste de montrer que les espaces navaient pas "sauté chez moi" comme sugéré.
Décidément, je n'arrive pas à comprendre ce que tu n'aimes pas dans mon code.
Tant qu'à indenter, j'aime plutôt. Mais néanmoins il y a une erreur, une typo sans doute. Quelle règle cohérente peut amener à aligner le premier ? sous le 'a' de "status" et le second sous le 's' de "status" ? Il n'y a pas de style unique, mais je n'en vois aucun qui arrive à ce résultat.
-- Pierre Maurette
Emmanuel Delahaye
Mais néanmoins il y a une erreur, une typo sans doute. Quelle règle cohérente peut amener à aligner le premier ? sous le 'a' de "status" et le second sous le 's' de "status" ? Il n'y a pas de style unique, mais je n'en vois aucun qui arrive à ce résultat.
Eh bé, Tout ça en arriver là ? Tu ne pouvais pas le dire tout de suite ? Sache que je n'ai plus 20 ans et ma vue baisse (ce qui me console, c'est que ça t'arrivera aussi hé hé). J'ai fait la mise en page à la main vite fait en mettant (croyant mettre) une tabulation de 3 espaces... Pas besoins de jouer aux devinettes pour si peu...
Prend une femme, fait des enfants, ça t'occupera...
-- A+
Emmanuel Delahaye
Mais néanmoins il y a une erreur, une typo sans doute. Quelle règle
cohérente peut amener à aligner le premier ? sous le 'a' de "status" et
le second sous le 's' de "status" ? Il n'y a pas de style unique, mais
je n'en vois aucun qui arrive à ce résultat.
Eh bé, Tout ça en arriver là ? Tu ne pouvais pas le dire tout de suite ?
Sache que je n'ai plus 20 ans et ma vue baisse (ce qui me console, c'est
que ça t'arrivera aussi hé hé). J'ai fait la mise en page à la main vite
fait en mettant (croyant mettre) une tabulation de 3 espaces... Pas
besoins de jouer aux devinettes pour si peu...
Prend une femme, fait des enfants, ça t'occupera...
Mais néanmoins il y a une erreur, une typo sans doute. Quelle règle cohérente peut amener à aligner le premier ? sous le 'a' de "status" et le second sous le 's' de "status" ? Il n'y a pas de style unique, mais je n'en vois aucun qui arrive à ce résultat.
Eh bé, Tout ça en arriver là ? Tu ne pouvais pas le dire tout de suite ? Sache que je n'ai plus 20 ans et ma vue baisse (ce qui me console, c'est que ça t'arrivera aussi hé hé). J'ai fait la mise en page à la main vite fait en mettant (croyant mettre) une tabulation de 3 espaces... Pas besoins de jouer aux devinettes pour si peu...
Prend une femme, fait des enfants, ça t'occupera...
-- A+
Emmanuel Delahaye
Stephane Legras-Decussy
"Harpo" a écrit dans le message de news: 445e3a2a$0$20175$
Je pense que quelque chose de simple doit s'écrire simplement sans prendre beaucoup de lignes, cela évite de browser des pages d'une fonction avant de se rende compte qu'elle ne fait pas grand chose.
oui mais là en l'espèce, c'est quelque chose de simple qui s'écrit compliqué en peu de ligne.
je préfère largement scroller 2 pages qu'un gamin de 12 ans comprend que de jouer au Sudoku sur 3 lignes qui tuent...
dès qu'un projet devient gros, de toute facon, ça devient globalement complexe à comprendre avec des montagnes de fichiers donc il faut compenser en étant toujours localement trivial amha.
"Harpo" <trashcan@hotmail.com> a écrit dans le message de news:
445e3a2a$0$20175$8fcfb975@news.wanadoo.fr...
Je pense que quelque chose de simple doit s'écrire simplement sans
prendre beaucoup de lignes, cela évite de browser des pages d'une
fonction avant de se rende compte qu'elle ne fait pas grand chose.
oui mais là en l'espèce, c'est quelque chose de
simple qui s'écrit compliqué en peu de ligne.
je préfère largement scroller 2 pages qu'un gamin de 12 ans
comprend que de jouer au Sudoku sur 3 lignes qui tuent...
dès qu'un projet devient gros, de toute facon, ça devient
globalement complexe à comprendre avec des montagnes
de fichiers donc il faut compenser
en étant toujours localement trivial amha.
"Harpo" a écrit dans le message de news: 445e3a2a$0$20175$
Je pense que quelque chose de simple doit s'écrire simplement sans prendre beaucoup de lignes, cela évite de browser des pages d'une fonction avant de se rende compte qu'elle ne fait pas grand chose.
oui mais là en l'espèce, c'est quelque chose de simple qui s'écrit compliqué en peu de ligne.
je préfère largement scroller 2 pages qu'un gamin de 12 ans comprend que de jouer au Sudoku sur 3 lignes qui tuent...
dès qu'un projet devient gros, de toute facon, ça devient globalement complexe à comprendre avec des montagnes de fichiers donc il faut compenser en étant toujours localement trivial amha.