équivalent de l'opérateur ternaire "?" - VB/VBA/VBS - Programmation
Marsh Posté le 28-07-2003 à 18:02:24
si var est une vatiable :
Code :
|
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 ?
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
Marsh Posté le 28-07-2003 à 18:07:32
cvb a écrit : si var est une vatiable :
|
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 !
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
Marsh Posté le 28-07-2003 à 18:10:01
ReplyMarsh Posté le 28-07-2003 à 18:11:00
cvb a écrit : |
sors s'il te plait
Marsh Posté le 28-07-2003 à 18:12:00
Taz a écrit : sors s'il te plait |
nan nan.. cherchons à comprendre d'abord!
Marsh Posté le 28-07-2003 à 18:13:47
cvb a écrit : |
1) qu'est ce qui a le code ASCII 63?
2) qu'est ce qu'on en a à foutre?
Marsh Posté le 28-07-2003 à 18:15:57
Mr yvele 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...
Marsh Posté le 28-07-2003 à 18:17:31
cvb a écrit : |
cvb a écrit : |
oui.. et loin, trés trés loin..
Marsh Posté le 28-07-2003 à 18:21:43
on parle d'opérateur ternaire boudiou
bon en fait dans le délire, j'avais même pas vu que c'était une question pour moi
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 :
|
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? )
Marsh Posté le 28-07-2003 à 18:28:05
merci
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
Marsh Posté le 28-07-2003 à 18:28:19
drasche a écrit : on parle d'opérateur ternaire boudiou
|
euh c'est quoi l'interet du truc alors, à part exectuer trois fonctions en une ligne et rendre le code encore plus illisible?
Marsh Posté le 28-07-2003 à 18:30:36
aucun
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.
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
quelle daube
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
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
Marsh Posté le 28-07-2003 à 19:46:15
ha ouais en effet
Marsh Posté le 28-07-2003 à 20:38:30
zezette a écrit : |
euh c'est pour ça que tu voulais un operateur ternaire?
Marsh Posté le 28-07-2003 à 20:42:11
cvb a écrit : |
c'est pas possible, les multis d'antp sont de sortie pour tester le new modo
Marsh Posté le 28-07-2003 à 20:53:56
ReplyMarsh Posté le 28-07-2003 à 21:21:43
zezette a codé : |
troll
ban
Marsh Posté le 29-07-2003 à 08:32:28
kadreg a écrit : troll |
tu connais rien au troll à VB et tu te permets de crier au troll, ya comme un bug là
bon on va arrêter de polluer hein
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
Marsh Posté le 29-07-2003 à 11:11:15
Pour faire simple, le type Variant est le seul à accepter la valeur Null
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