IF - ELSEIF - ELSE AVEC L'OPÉRATEUR TERNAIRE

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 - 25 oct. 2005 à 06:12
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 1 juin 2006 à 20:34
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/34335-if-elseif-else-avec-l-operateur-ternaire

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 juin 2006 à 20:34
des remerciements, c'est pas du tout du flood...
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
1 juin 2006 à 20:28
"Merci pour la citation de mon article ^^

beau déterrage au passage :)"
Si c'est pas du flood, ca...

@++

R@f
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
31 mai 2006 à 19:33
Merci pour la citation de mon article ^^

beau déterrage au passage :)
Andrei2006 Messages postés 7 Date d'inscription jeudi 13 avril 2006 Statut Membre Dernière intervention 22 septembre 2006
31 mai 2006 à 03:49
Mouais... perso je suis contre les ternaires :

1) Ton code deviens ilisible. Franchement des ? puis des : c'est pas très rassurant :)

2) (et c'est prouvé :) Les blocs conditionels "classiques" et les switch-case sont plus rapides que les ternaires :D
http://www.vulgarisation-informatique.com/optimiser-php.php
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
2 nov. 2005 à 11:16
J'aurais du être plus précis :

L'opérateur ternaire fonctionne comme ca :

$var = ( condition ) ? condition-vrai : condition-fausse;

Un peu comme un if/else
if ( condition ) {
condition-vrai;
} else {
condition-fausse;
}

Et bien maintenant, j'utilise l'opérateur ternaire pour faire un if/elseif/else :

$var = ( condition ) ? condition-vrai : ( condition2 ) ? condition-2 vrai : condition-2 fausse;

Ce qui revient à :
if ( condition ) {
condition-vrai;
}elseif ( condition2 ) {
condition2-vrai
}else {
condition2-fausse;
}

Voila !
coolmanin25 Messages postés 1 Date d'inscription vendredi 7 octobre 2005 Statut Membre Dernière intervention 1 novembre 2005
1 nov. 2005 à 19:01
Je comprends pas grand chose lol
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
31 oct. 2005 à 10:42
La dessus on est d'accord :)
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
30 oct. 2005 à 23:04
Ce que je veux dire par là c'est que l'interpréteur n'est pas forcément logique par rapport à l'humain ;-)
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
30 oct. 2005 à 22:32
Pour toi c'est plus rapide pour l'oeil :) Pas pour l'interpréteur qui doit se taper une ligne entière pour connaitre la valeur de $var1 par exemple :)

Pour nous, c'est très logique donc très rapide. Pour l'interpréteur non, car plus la ligne est grande, plus elle est plus longue à examiner.

C'est pareil pour l'opérateur ternaire. Il est plus lent car tout ce fait en une ligne (condition, résultat vrai, résultat faux), donc tout doit être pris en compte. Hors, un vieux if() ira plus vite car il ne prendra en compte que le bon résultat (qu'il soit vrai ou faux).

Voila pourquoi :)
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
30 oct. 2005 à 21:26
"Question de raisonnement :)"

effectivement, pour moi quand je vois que $var=$var2=$var3=1 c'est plus rapide pour moi que de voir

$var=1;
$var2=1;
$var3=1;

etc... après c'est sûr que bon c'est comme pour le reste, certains sont rapides sur une méthode au contraire des autres et inversement qui préfèrent une autre méthode ;-)
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
30 oct. 2005 à 21:21
Non, bien au contraire !

Il est beaucoup plus facile de créer directement une variable par sa valeur plutot que de créer une variable qui aura pour valeur une autre variable qui elle-même aura pour valeur une autre variable etc...

C'est de l'interprétation à la volée, chose qui n'existe pas quand on compile.
Voila pourquoi assigner une valeur à une variable une par une est plus rapide que d'assigner la même valeur à un paquet de variables :)

Question de raisonnement :)
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
30 oct. 2005 à 20:50
"Non, pas pour moi. Etant donnée que PHP interprète au fur et à mesure :"

justement, en toute logique

$var1=$var2=$var3=1; devrait être plus rapide que

$var1=1;
$var2=1;
$var3=1;
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
30 oct. 2005 à 20:26
"L'opérateur ternaire est assez simple et ton else if n'est qu'une imbrication." Ah parce qu'un if/elseif/else peut faire autre chose qu'une imbrication ?
Par contre, je tiens à te rassurer tout de suite, bon nombre de personnes ne comprennent pas l'utilisation de l'opérateur ternaire.
En même temps, j'ai juste mis ca pour montrer que l'op ternaire peut faire autre chose qu'un if/else standard et qu'il peut aussi faire du if/elseif/elseif/else par exemple, ce dont bon nombre n'ont peut-être jamais pensé à faire quand il y a des conditions qui sont simples.

"( le $var1 $var2 $var3 = 1 m'a étonné aussi! )"
Non, pas pour moi. Etant donnée que PHP interprète au fur et à mesure :
-> Création de $var1.
-> Valeur de $var1 = $var2.
-> $var2 n'existe pas. Création de $var2.
-> Valeur de $var2 = $var3.
-> $var3 n'existe pas. Création de $var3.
-> Valeur de $var3 = 1.
-> Donc, $var2 $var3 1.
-> $var1 $var2 1.

Ce type d'écriture est d'autant plus long qu'il y a de variable en plus.
Bah voui, PHP ne lit pas à l'envers :D
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
26 oct. 2005 à 23:21
Oh! Je m'y attendais pas! :)
Bon, alors je suppose que j'ai vu ca en C++.

Merci pour le lien! ( le $var1 $var2 $var3 = 1 m'a étonné aussi! )

@++

R@f
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
26 oct. 2005 à 22:57
en php il est derrière ;-)

www.vulgarisation-informatique.com/optimiser-php.php
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
26 oct. 2005 à 22:54
Salut!
Je trouve dommage d'avoir une source que pour ca... L'opérateur ternaire est assez simple et ton else if n'est qu'une imbrication. Et une fois qu'on a vu un exemple, on les a un peu tous vus...

J'aurais préféré si c'était avec d'autres "astuces", etc...

Anthomicro : "Niveau benchs l'opérateur ternaire est légèrement derrière le if,elseif,else"
T'es sur, il me semblait que c'était là son intérêt principal, d'être plus rapide (en tout cas dans d'autres languages de prog). Je me trompe?

@++

R@f
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
25 oct. 2005 à 12:18
un problème de cache surement ;-)
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
25 oct. 2005 à 12:16
Pourtant, ma source est bien passé du coté tuto...Du moins sur cette page, mais pas sur la page index :/
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
25 oct. 2005 à 11:50
les admins ne peuvent pas modifier ce paramètre... C'est soit code, soit tuto.
nous ne pouvons modifier que le titre et la catégorie des sources (et tuto). Accessoirement le flag indiquant que la source est en .net, mais ce ne vous concerne pas.
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
25 oct. 2005 à 11:46
Ouais, mon exemple est vraiment mal pris, car j'utilise true/false comme élément de réponse à mon opérateur.
Mais jvais le refaire.
Par contre, je savais pas trop où le mettre... code ou tuto :/ Alors je laisse le choix à notre cher Admin de le mettre la où il le veut ;)

Et oui Malalam, j'ai du temps à perdre :) Enfin pas tout à fait, parce que j'utilise ce type d'opérateur pour ma propre gestion des sessions. Et l'opérateur ternaire n'a pas été crée que pour faire joli :)
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
25 oct. 2005 à 10:31
Niveau benchs l'opérateur ternaire est légèrement derrière le if,elseif,else

Sinon bah j'aurais mis ça dans les tutos aussi ;-)
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
25 oct. 2005 à 10:16
ça s'utilises dans un projet, mais ça, ça ne fait rien... c'est pas vraiment une source, juste un bout de tuto... Mais dans ce cas, il manque les explications et les benchs...
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
25 oct. 2005 à 08:54
J'ai tâché de déplacer.

T'as vraiment du temps à perdre, n'empêche, FhX, pour trouver des trucs pareils... ;-)
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
25 oct. 2005 à 06:56
Mouahahah!
Ouais utilises trois valeurs différentes pour $truc dans ton exemple sinon ça rime à rien :p

Sinon c'est bien joli (j'ai utilisé cette syntaxe pour des trucs court), mais ça devient vite illisible/indigeste :)

(Sinon ça aurait pas plutôt sa place dans "tuto" que dans "code" ce truc? :x)
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
25 oct. 2005 à 06:12
d'un autre coté, ton code peut aussi s'écrire comme ceci :
$truc ( $var 0 || $var2 === 0 );

et je trouve ca plus propre...
Rejoignez-nous