WhiteAppleX Voir le profil de WhiteAppleX
Posté le 28 février 2013 à 01:20:08 Avertir un administrateur
Alors je pose la question clairement vu que moi je souhaite savoir: C'est quoi le problème avec cet opérateur ternaire ?
La lisibilité bien souvent...
Cette notation peut dépanner, mais elle devient vite difficile à lire sitôt que les conditions et résultats ne sont pas triviaux. Objectivement, plus tu as de machins de ce style "??:" qui s'emmêlent, plus l'oeil va devoir s'attarder sur le code à la relecture pour le comprendre.
Pour ce qui est de rendre le code plus concis? Bof c'est un demi-faux argument parce que si tu écris une ligne complexe qui est plus dure à comprendre que 3 lignes très simples, c'est que souvent tu es en train de faire de la merde.
Il y a des langages à la mode (scala pour ne pas le nommer) dont certains adeptes sont tout heureux de faire étalage de leur bêtise en transformant des codes de 5-6 lignes très simples en "one-liners" illisibles.
Maintenant, on peut utiliser un opérateur ternaire d'une manière à peu près défendable, souvent tu le vois dans du code de templating HTML comme par exemple :
<input id=@{id} type="checkbox" @{ setting.isEnabled() ? "checked": "" } />
Ou encore :
<h3>Hello @{ session != null ? session.username() : "Visitor" }</h3>
Surtout parce que ça permet d'éviter de déclarer trop de variables intermédiaires à usage unique qui finissent par nuir à la lisibilité, et de plus ça aide à préserver la "ressemblance" du template avec la sortie qu'il génère réellement.
Donc en gros, l'op ternaire n'est pas à proscrire à tout prix, mais il faut soigneusement évaluer au cas par cas si cela rend les choses globalement plus lisibles ou non.