Interprétation de Null [WDXX]

Le
Daireaux Jean-Baptiste
Bonjour,

j'ai un soucis de conversion.

Un variant peut être égal à null.

Un variant peux être une chaine ou un nombre, mais n'est pas définie
quand c'est null

Soit le code en WD11

b est un variant
ch est une chaine

b=null
ch=b
info(ch)

J'obtiens 0 et pas vide

Donc le variant qui est égal à null se transforme en chaine "0"
ce qui est très déroutant.

En cherchant plus loin, je me suis aperçu que c'est la transformation de
null qui pose un problème.

Car on a :

Le test de null=0 renvoie vrai
Le test de nullúux renvoie vrai
Le test de null="0" renvoie vrai
Le test de "0"=vrai renvoie vrai
Donc la windev me dit que faux=null="0"=vrai donc faux=vrai !!!


Cette illogisme m'a causé quelque bug dans mes programmes.
Le problème existe-t-il dans les versions supérieures de windev (12, 14) ?

J.B.D.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Romain PETIT
Le #19529331
Après mure réflexion, Daireaux Jean-Baptiste a écrit :
Bonjour,


Bonjour,

Le test de null=0 renvoie vrai
Le test de nullúux renvoie vrai
Le test de null="0" renvoie vrai
Le test de "0"=vrai renvoie vrai
Donc la windev me dit que faux=null="0"=vrai donc faux=vrai !!!



Cette illogisme m'a causé quelque bug dans mes programmes.
Le problème existe-t-il dans les versions supérieures de windev (12, 14) ?



Ca a l'air d'avoir été corrigé en 12 :

Trace(Null=0)// renvoie 1 (vrai)

mais attention :
vVariant est un variant
vVariant = 0
si vVariant = null alors
// ne passe pas ici car vVariant est =0 (non null)
fin

Trace(Nullúux)// erreur "Le type booléen ne peut pas être comparé à
la valeur Null."
Trace(Null="0")// renvoie 0
Trace("0"=Vrai)// renvoie 0

Ceci dit, je trouve très dangereux de travailler avec des variant, à
mon sens il vaut toujours mieux faire des transformations de types
explicites (NumériqueVersChaine, val...).

A+

--
Romain PETIT
contact : http://cerbermail.com/?O16kfXOFcq
+-+ posté sur Usenet avec MesNews et non depuis un forum web +-+
news:fr.comp.developpement.agl.windev
http://www.mesnews.net/
http://fr.wikipedia.org/wiki/Newsgroup
Daireaux Jean-Baptiste
Le #19571081
Romain PETIT a écrit :
Après mure réflexion, Daireaux Jean-Baptiste a écrit :
Bonjour,


Bonjour,

Le test de null=0 renvoie vrai
Le test de nullúux renvoie vrai
Le test de null="0" renvoie vrai
Le test de "0"=vrai renvoie vrai
Donc la windev me dit que faux=null="0"=vrai donc faux=vrai !!!



Cette illogisme m'a causé quelque bug dans mes programmes.
Le problème existe-t-il dans les versions supérieures de windev (12,
14) ?



Ca a l'air d'avoir été corrigé en 12 :

Trace(Null=0)// renvoie 1 (vrai)

mais attention :
vVariant est un variant
vVariant = 0
si vVariant = null alors
// ne passe pas ici car vVariant est =0 (non null)
fin

Trace(Nullúux)// erreur "Le type booléen ne peut pas être comparé à la
valeur Null."
Trace(Null="0")// renvoie 0
Trace("0"=Vrai)// renvoie 0

Ceci dit, je trouve très dangereux de travailler avec des variant, à mon
sens il vaut toujours mieux faire des transformations de types
explicites (NumériqueVersChaine, val...).

A+




Les test que j'effectue sont :

x est un <mettre le type voulue>

x=null
si x alors
info("x est convertie en vrai")
sinon
info("x est convertie en faux")
fin
Daireaux Jean-Baptiste
Le #19571931
Daireaux Jean-Baptiste a écrit :
Romain PETIT a écrit :
Après mure réflexion, Daireaux Jean-Baptiste a écrit :
Bonjour,


Bonjour,

Le test de null=0 renvoie vrai
Le test de nullúux renvoie vrai
Le test de null="0" renvoie vrai
Le test de "0"=vrai renvoie vrai
Donc la windev me dit que faux=null="0"=vrai donc faux=vrai !!!



Cette illogisme m'a causé quelque bug dans mes programmes.
Le problème existe-t-il dans les versions supérieures de windev (12,
14) ?



Ca a l'air d'avoir été corrigé en 12 :

Trace(Null=0)// renvoie 1 (vrai)

mais attention :
vVariant est un variant
vVariant = 0
si vVariant = null alors
// ne passe pas ici car vVariant est =0 (non null)
fin

Trace(Nullúux)// erreur "Le type booléen ne peut pas être comparé à
la valeur Null."
Trace(Null="0")// renvoie 0
Trace("0"=Vrai)// renvoie 0

Ceci dit, je trouve très dangereux de travailler avec des variant, à
mon sens il vaut toujours mieux faire des transformations de types
explicites (NumériqueVersChaine, val...).

A+




Les test que j'effectue sont :

x est un <mettre le type voulue>

x=null
si x alors
info("x est convertie en vrai")
sinon
info("x est convertie en faux")
fin



Désolé j'ai été coupé ...

Mon problème est la cohérence du transtypage.
Je fait de la programmation objet avec windev, je construit des outils
pour me faire développer 10 fois plus vite (vraiment). Par exemple j'en
avait marre de faire des tableaux dynamiques de structures dont il
fallait suivre la taille à la main.
Donc je me suis fait une classe liste. Dans cette liste je met des
entier, des chaines, des trucs, des listes, ...
J'ai un itérateur dessus et des fonctions d'accès indexé.

et quand j'écris :

ch est une chaine

ch=ma_liste:get(x) //accés à un zone vide.
si ch="" alors
//ne passe jammais la car null convertie en "0"
fin

Bon mais si c'est corriger en Windev 12 alors je verrai lorsque l'on
achètera WD 15 ou 16
Publicité
Poster une réponse
Anonyme