Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Interprétation de Null [WDXX]

3 réponses
Avatar
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=faux 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.

3 réponses

Avatar
Romain PETIT
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
Avatar
Daireaux Jean-Baptiste
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
Avatar
Daireaux Jean-Baptiste
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