trigraphe dans test conditionnel !
Le
jmm
Je viens de parcourir un morceau de code qui contient ce genre
d'instruction :
if( dots == 0 ? len > 8 : len > 3 )
Supprenant non ?
Quand pensez-vous ( performance, maintenabilité, ) ?
d'instruction :
if( dots == 0 ? len > 8 : len > 3 )
Supprenant non ?
Quand pensez-vous ( performance, maintenabilité, ) ?

Poser une question


Est-ce plus lisible que
((dots == 0) && (len > 8)) || ((dots != 0) && (len > 3))
? J'ai l'impression que non. L'aspect "ou exclusif" du "ou" dans cette
formule ne saute pas aux yeux.
A noter qu'il y aurait pu avoir
if(len > (dots == 0 ? 8 : 3))
Qui est encore plus compact que la formule initiale, mais qui ne me
plait mois car on ne lit pas directement ce qu'on veut faire. En effet,
il faut un peu plus décoder et réfléchir pour comprendre ce que ce test
réalise.
sam.
Le terme 'trigraph' ne s'applique pas à ce code. On parle plutôt
d'opérateur ternaire.
Le langage C offre des possibilité de syntaxe 'astucieuses', qui
facilitent la traduction du source en du binaire efficace, mais ne
facilitent pas toujours la lecture. C'est une question d'habitude,
mais justement, si on est pas habitué, ça peut donner des boutons ...
Je pense que les compilateurs modernes n'ont plus besoins de cette
aide du 'compilateur humain', car ils sont suffisamment performants
pour produire du code efficace, même si le source est écrit de manièr e
lisible par tous ! Mais sur une plateforme exotique ou ancienne, on
peut parfois tomber sur de vielles carnes qu'il faut "aider à la
main" ...
Qu'en...
C'est du C idiomatique. Ca se lit tres bien si on connait le langage.
Ca n'est ni bien, ni mal. En l'absence du contexte environnant, je n'ai
aucune idee si j'ecrirais ce genre de chose comme ca, ou s'il y a moyen
de faire plus clair/plus joli/mieux...
Ah, et cote expression francaise, evite aussi de confondre trigraphe et
operateur ternaire, ca fait desordre...
On ne parlera pas de trigraphe: un trigraph, c'est une séquence
de trois caractères qui est équivalente à un seul (en général)
caractères peut accessible sur certains claviers.
Un peu de google ou de wikipedia te donnera plus d'infos.
En terme de performances, je n'en pense rien.
Après, en terme de lisibilité, il parait clair que l'optique
des if imbriqués est pire.
Reste des choses du type
if ( (dots == 0 && len > 8 )
|| (dots != 0 && len > 3 ) )...
ou
int bound= (dots == 0 ? 8 : 3 );
if (len > bound) ...
Voilà. A titre personnel, je trouve la version originale
plutôt pas mal. Mais peut-être que l'opérateur ?: va dérouter
des programmeurs moins habitués.
Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?a...amp;id_mot0
Non. C'est du C correct, et tu peux être sûr que ce code n'a pas été
traduit du basic...
Attention : ta formule à toi est différente. En particulier, elle évalue
dots deux fois, ce qui n'est pas le cas de celle de jmm.
Remplace dots par getchar() ou *p++ et on voit bien le problème...
C'est bizarre, moi je trouve cette dernière plus facile à lire.
Comme quoi tous les avis sont possibles en matière de style.
Antoine