Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2472 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  équivalent de l'opérateur ternaire "?"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

équivalent de l'opérateur ternaire "?"

n°469910
zezette
"Allez hop, au revoir"
Posté le 28-07-2003 à 15:36:19  profilanswer
 

Existe-il un équivalent en VB de l'opérateur ternaire "?" (qui existe en C et en PHP) ?
 
exemple :
 
if(var==5)
 echo 'cinq';
else
 echo 'pas cinq'
 
devient :
 
echo var==5?'cinq':'pas cinq';


---------------
"Par moment j'me d'mande si chui pas con" G. de Suresnes
mood
Publicité
Posté le 28-07-2003 à 15:36:19  profilanswer
 

n°470072
cvb
Posté le 28-07-2003 à 18:02:24  profilanswer
 

si var est une vatiable :
 
 

Code :
  1. dim var = 5
  2. if var = 5 then
  3. msgbox("cinq" )
  4. else
  5. msgbox("pas cinq" )
  6. end if


 
je ne connais rien en C++, je sais simplement que cette opérateur sur mon livre de C++ est le code ASCII 63. A quoi il sert ?


Message édité par cvb le 28-07-2003 à 18:02:45
n°470077
zezette
"Allez hop, au revoir"
Posté le 28-07-2003 à 18:04:58  profilanswer
 

mon exemple te montre qu'avec l'opérateur ternaire, on peut faire en une ligne ce qu'on aurait fait en 4


---------------
"Par moment j'me d'mande si chui pas con" G. de Suresnes
n°470079
Taz
bisounours-codeur
Posté le 28-07-2003 à 18:07:32  profilanswer
 

cvb a écrit :

si var est une vatiable :
 
 

Code :
  1. dim var = 5
  2. if var = 5 then
  3. msgbox("cinq" )
  4. else
  5. msgbox("pas cinq" )
  6. end if


 
je ne connais rien en C++, je sais simplement que cette opérateur sur mon livre de C++ est le code ASCII 63. A quoi il sert ?

:heink:  :heink:  :heink:

n°470080
Loom the G​loom
Even coders get the blues...
Posté le 28-07-2003 à 18:08:33  profilanswer
 

:lol:


---------------
Music|Market|Feed|Loom|DVD
n°470082
cvb
Posté le 28-07-2003 à 18:09:17  profilanswer
 

zezette a écrit :

mon exemple te montre qu'avec l'opérateur ternaire, on peut faire en une ligne ce qu'on aurait fait en 4


 
je ne crois pas que sa existe !

n°470083
Mr yvele
yvele n'est plus.
Posté le 28-07-2003 à 18:09:32  profilanswer
 

cvb a écrit :

je ne connais rien en C++, je sais simplement que cette opérateur sur mon livre de C++ est le code ASCII 63. A quoi il sert ?


 
Je connais rien en VB, mais  :??:  :??:


---------------
yvele n'est plus.
n°470085
cvb
Posté le 28-07-2003 à 18:10:01  profilanswer
 


 
oui, c'est le code ASCII 63, curieux ? sans doute, mais j'y peux rien !

n°470087
Taz
bisounours-codeur
Posté le 28-07-2003 à 18:11:00  profilanswer
 

cvb a écrit :


 
oui, c'est le code ASCII 63, curieux ? sans doute, mais j'y peux rien !  

sors s'il te plait

n°470088
Mr yvele
yvele n'est plus.
Posté le 28-07-2003 à 18:12:00  profilanswer
 

Taz a écrit :

sors s'il te plait


 
nan nan.. cherchons à comprendre d'abord!


---------------
yvele n'est plus.
mood
Publicité
Posté le 28-07-2003 à 18:12:00  profilanswer
 

n°470091
walli
Posté le 28-07-2003 à 18:12:50  profilanswer
 

Taz a écrit :

sors s'il te plait


 
 [:rofl]  [:rofl]


---------------
NP :
n°470092
Mr yvele
yvele n'est plus.
Posté le 28-07-2003 à 18:13:47  profilanswer
 

cvb a écrit :


 
oui, c'est le code ASCII 63, curieux ? sans doute, mais j'y peux rien !  


 
1) qu'est ce qui a le code ASCII 63?
2) qu'est ce qu'on en a à foutre?
 
 :heink:


---------------
yvele n'est plus.
n°470093
Loom the G​loom
Even coders get the blues...
Posté le 28-07-2003 à 18:13:52  profilanswer
 

drasche une idée ?


---------------
Music|Market|Feed|Loom|DVD
n°470101
cvb
Posté le 28-07-2003 à 18:15:57  profilanswer
 

Mr yvele a écrit :


 
1) qu'est ce qui a le code ASCII 63?
2) qu'est ce qu'on en a à foutre?
 
 :heink:  


 
le "?" est le code ASCII63, je l'ai sous les yeux ! s'il veux le faire en VB ou cette opérateur n'existe pas; il aurait pu se servir du code ASCII, mais bon, comme dit Taz, je m'en vais...

n°470103
Loom the G​loom
Even coders get the blues...
Posté le 28-07-2003 à 18:16:36  profilanswer
 

cvb a écrit :


 
le "?" est le code ASCII63, je l'ai sous les yeux ! s'il veux le faire en VB ou cette opérateur n'existe pas; il aurait pu se servir du code ASCII, mais bon, comme dit Taz, je m'en vais...


 
 :heink:  :lol:


---------------
Music|Market|Feed|Loom|DVD
n°470104
Mr yvele
yvele n'est plus.
Posté le 28-07-2003 à 18:17:31  profilanswer
 

cvb a écrit :


s'il veux le faire en VB ou cette opérateur n'existe pas; il aurait pu se servir du code ASCII


 
 [:rofl]  
 

cvb a écrit :


je m'en vais...


 
oui.. et loin, trés trés loin..  :o


---------------
yvele n'est plus.
n°470106
Taz
bisounours-codeur
Posté le 28-07-2003 à 18:17:39  profilanswer
 

[:albator]

n°470110
Loom the G​loom
Even coders get the blues...
Posté le 28-07-2003 à 18:18:57  profilanswer
 


 
c'est quoi ce truc  [:daplopbot]


---------------
Music|Market|Feed|Loom|DVD
n°470113
drasche
Posté le 28-07-2003 à 18:21:43  profilanswer
 

on parle d'opérateur ternaire boudiou :o
 
bon en fait dans le délire, j'avais même pas vu que c'était une question pour moi [:cupra] [:ddr555]
 
Oui, il existe un opérateur ternaire. Il s'appelle Iif. C'est une fonction qui prend 3 paramètress: la condition, la valeur de retour si True, et la valeur de retour si False.
 
Attention!  Je parle bien de "valeurs de retour".  Le petit truc à savoir étant que si tu passes des fonctions en paramètres, elles seront TOUTES exécutées, peut importe la condition:
 

Code :
  1. Resultat = Iif(FunctionTest, FunctionTrue, FunctionFalse)


 
Mettons que les 3 paramètres sont des fonctions, et FunctionTest devant naturellement renvoyer un booléen. FunctionTrue et FunctionFalse seront toutes deux exécutées quelque soit le résultat de FunctionTest.  Donc pas un vrai opérateur ternaire.  je crois qu'en C, seule la fonction correspondante sera exécutée, comme si on avait fait un If/Then/Else, mais c'est à confirmer par un spécialiste du C (Taz? :D)

n°470118
Taz
bisounours-codeur
Posté le 28-07-2003 à 18:25:05  profilanswer
 

exact, l'évaluation en C est partielle

n°470125
drasche
Posté le 28-07-2003 à 18:28:05  profilanswer
 

merci :jap:
 
j'avais ça en tête mais comme mon dernier cours de C date un peu, je voulais en être sûr. En tout cas ça me semble plus logique en C qu'en VB.  Mais bon, VB c'est vraiment à part [:gratgrat]

n°470126
the real m​oins moins
Posté le 28-07-2003 à 18:28:19  profilanswer
 

drasche a écrit :

on parle d'opérateur ternaire boudiou :o
 
bon en fait dans le délire, j'avais même pas vu que c'était une question pour moi [:cupra] [:ddr555]
 
Oui, il existe un opérateur ternaire. Il s'appelle Iif. C'est une fonction qui prend 3 paramètress: la condition, la valeur de retour si True, et la valeur de retour si False.
 
Attention!  Je parle bien de "valeurs de retour".  Le petit truc à savoir étant que si tu passes des fonctions en paramètres, elles seront TOUTES exécutées, peut importe la condition:
 

Code :
  1. Resultat = Iif(FunctionTest, FunctionTrue, FunctionFalse)


 
Mettons que les 3 paramètres sont des fonctions, et FunctionTest devant naturellement renvoyer un booléen. FunctionTrue et FunctionFalse seront toutes deux exécutées quelque soit le résultat de FunctionTest.  Donc pas un vrai opérateur ternaire.  je crois qu'en C, seule la fonction correspondante sera exécutée, comme si on avait fait un If/Then/Else, mais c'est à confirmer par un spécialiste du C (Taz? :D)

euh c'est quoi l'interet du truc alors, à part exectuer trois fonctions en une ligne et rendre le code encore plus illisible? :heink:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°470129
drasche
Posté le 28-07-2003 à 18:30:36  profilanswer
 

aucun [:spamafote]
 
d'ailleurs je m'en sers uniquement si les valeurs à renvoyer sont codées en dur (constantes, ce genre de choses).
 
Pour le reste je m'en tiens au if/then/else.

n°470130
Taz
bisounours-codeur
Posté le 28-07-2003 à 18:31:15  profilanswer
 

bon, on va donc conclure que ça n'existe pas en VB

n°470132
the real m​oins moins
Posté le 28-07-2003 à 18:32:27  profilanswer
 

ha ça y est j'ai pigé j'ai lu tes 2 phrases au dessus de la definition de la fonction :D
 
quelle daube [:mlc]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°470173
zezette
"Allez hop, au revoir"
Posté le 28-07-2003 à 19:41:31  profilanswer
 

Merci, ça marche... a un détail près :
 
Disons qu'avant j'ai fait "un select machin, entier from table;" et que le resultat se trouve dans "resultatderequetesql". Ce champs entier peut être null
 
dim chaine, resultatderequetesql
 
chaine = IIf(IsNull(resultatderequetesql("entier" )), "", CStr(resultatderequetesql("entier" )))
 
Si le resultat est null il devrait renvoyer une chaine vide sinon renvoyer la convertion en chaine de cet entier
 
Mais visiblement il exécute la condition false (la convertion) meme si entier est null --> plantage car on peut pas convertir null en chaine


Message édité par zezette le 28-07-2003 à 19:42:49

---------------
"Par moment j'me d'mande si chui pas con" G. de Suresnes
n°470175
drasche
Posté le 28-07-2003 à 19:43:48  profilanswer
 

oui, c'est bien ce que j'ai dit plus haut: VB exécute tout quelque soit le résultat.  Je te conseille donc de faire une fonction du style IfStringNull qui fera ce boulot en 5 lignes avec un if/then/else classique [:spamafote]

n°470177
zezette
"Allez hop, au revoir"
Posté le 28-07-2003 à 19:46:15  profilanswer
 

ha ouais en effet :sweat:


---------------
"Par moment j'me d'mande si chui pas con" G. de Suresnes
n°470203
the real m​oins moins
Posté le 28-07-2003 à 20:38:30  profilanswer
 

zezette a écrit :


dim chaine, resultatderequetesql
 
chaine = IIf(IsNull(resultatderequetesql("entier" )), "", CStr(resultatderequetesql("entier" )))
 

euh c'est pour ça que tu voulais un operateur ternaire? :heink:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°470205
schnapsman​n
Zaford Beeblefect
Posté le 28-07-2003 à 20:42:11  profilanswer
 

cvb a écrit :


je ne connais rien en C++, je sais simplement que cette opérateur sur mon livre de C++ est le code ASCII 63. A quoi il sert ?


 
c'est pas possible, les multis d'antp sont de sortie pour tester le new modo  [:zebra33]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°470217
cvb
Posté le 28-07-2003 à 20:53:56  profilanswer
 

SchnapsMann a écrit :


 
c'est pas possible, les multis d'antp sont de sortie pour tester le new modo  [:zebra33]  

:??:

n°470228
kadreg
profil: Utilisateur
Posté le 28-07-2003 à 21:21:43  profilanswer
 

zezette a codé :


chaine = IIf(IsNull(resultatderequetesql("entier" )), "", CStr(resultatderequetesql("entier" )))


 
troll :o
ban :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°470448
drasche
Posté le 29-07-2003 à 08:32:28  profilanswer
 


tu connais rien au troll à VB et tu te permets de crier au troll, ya comme un bug là [:meganne]
 
bon on va arrêter de polluer hein :o

n°470651
Aratorn
Black Swordman
Posté le 29-07-2003 à 10:54:41  profilanswer
 

Le pb avec Iif, c quand tu fait fait référence à un objet (par ex) qui peut être null :
 
MaVar = Iif(MyObject Is Nothing, "", MyObject.Name)
 
Comme le disait Drashe, toutes les valeurs de retour sont évalués. Iif est donc à priviligié avec des variables de types entiers, chaînes, ... et pas avec des objets (recordset, field, ...).
 
Sinon, pour le mettre en une ligne, tu peux écrire :
 
If MyObjet Is Nothing Then MaVar = "" Else MaVar = MyObject.Name

n°470681
drasche
Posté le 29-07-2003 à 11:11:15  profilanswer
 

Pour faire simple, le type Variant est le seul à accepter la valeur Null :jap:

n°470698
Aratorn
Black Swordman
Posté le 29-07-2003 à 11:13:52  profilanswer
 

Tout à fait :jap:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  équivalent de l'opérateur ternaire "?"

 

Sujets relatifs
petit exemple: fabriquer votre propre opérateur ternairepb d'operateur
Surcharge d operateur = et virtual , ca va ensemble ?[batch dos] il y a t il une equivalent de [resolu + solution]
[CSS] equivalent de cellspacing="0" ?Y-a-til un équivalent string_replace ou ereg_replace en C++ ?
surcharge d'operateur quand en faire des fonctions membres/pas membresEquivalent C++ à implode/explode en PHP
Fonction équivalent à fgetcsv() de PHP ? 
Plus de sujets relatifs à : équivalent de l'opérateur ternaire "?"


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR