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

équivalent de l'opérateur ternaire "?" - VB/VBA/VBS - Programmation

Marsh Posté le 28-07-2003 à 15:36:19    

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
Reply

Marsh Posté le 28-07-2003 à 15:36:19   

Reply

Marsh Posté le 28-07-2003 à 18:02:24    

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
Reply

Marsh Posté le 28-07-2003 à 18:04:58    

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
Reply

Marsh Posté le 28-07-2003 à 18:07:32    

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:

Reply

Marsh Posté le 28-07-2003 à 18:08:33    

:lol:


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 28-07-2003 à 18:09:17    

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 !

Reply

Marsh Posté le 28-07-2003 à 18:09:32    

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.
Reply

Marsh Posté le 28-07-2003 à 18:10:01    


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

Reply

Marsh Posté le 28-07-2003 à 18:11:00    

cvb a écrit :


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

sors s'il te plait

Reply

Marsh Posté le 28-07-2003 à 18:12:00    

Taz a écrit :

sors s'il te plait


 
nan nan.. cherchons à comprendre d'abord!


---------------
yvele n'est plus.
Reply

Marsh Posté le 28-07-2003 à 18:12:00   

Reply

Marsh Posté le 28-07-2003 à 18:12:50    

Taz a écrit :

sors s'il te plait


 
 [:rofl]  [:rofl]


---------------
NP :
Reply

Marsh Posté le 28-07-2003 à 18:13:47    

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.
Reply

Marsh Posté le 28-07-2003 à 18:13:52    

drasche une idée ?


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 28-07-2003 à 18:15:57    

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...

Reply

Marsh Posté le 28-07-2003 à 18:16:36    

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
Reply

Marsh Posté le 28-07-2003 à 18:17:31    

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.
Reply

Marsh Posté le 28-07-2003 à 18:17:39    

[:albator]

Reply

Marsh Posté le 28-07-2003 à 18:18:57    


 
c'est quoi ce truc  [:daplopbot]


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 28-07-2003 à 18:21:43    

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)

Reply

Marsh Posté le 28-07-2003 à 18:25:05    

exact, l'évaluation en C est partielle

Reply

Marsh Posté le 28-07-2003 à 18:28:05    

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]

Reply

Marsh Posté le 28-07-2003 à 18:28:19    

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 ?
Reply

Marsh Posté le 28-07-2003 à 18:30:36    

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.

Reply

Marsh Posté le 28-07-2003 à 18:31:15    

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

Reply

Marsh Posté le 28-07-2003 à 18:32:27    

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 ?
Reply

Marsh Posté le 28-07-2003 à 19:41:31    

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
Reply

Marsh Posté le 28-07-2003 à 19:43:48    

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]

Reply

Marsh Posté le 28-07-2003 à 19:46:15    

ha ouais en effet :sweat:


---------------
"Par moment j'me d'mande si chui pas con" G. de Suresnes
Reply

Marsh Posté le 28-07-2003 à 20:38:30    

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 ?
Reply

Marsh Posté le 28-07-2003 à 20:42:11    

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!"
Reply

Marsh Posté le 28-07-2003 à 20:53:56    

SchnapsMann a écrit :


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

:??:

Reply

Marsh Posté le 28-07-2003 à 21:21:43    

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 !
Reply

Marsh Posté le 29-07-2003 à 08:32:28    


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

Reply

Marsh Posté le 29-07-2003 à 10:54:41    

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

Reply

Marsh Posté le 29-07-2003 à 11:11:15    

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

Reply

Marsh Posté le 29-07-2003 à 11:13:52    

Tout à fait :jap:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed