OVH Cloud OVH Cloud

illogisme dans vb.net ?

14 réponses
Avatar
jan
si je fais x = y = z = 255, j'obtient x = 0
si je fais x = 255, j'obtient x = 255

dans la logique je devrais aussi obtenir x = 0


l'operateur de comparaison ne devrait s'appliquer que si
il y a la presence de IF et ca faciliterait certaines
initialisations...

10 réponses

1 2
Avatar
Eric Guillemette
Ce n'est pas un illogisme en tant que tel....

Étant donné qu'en vb.net, l'opérateur de comparaison et celui d'affectation
est le même, la norme est que l'opérateur le plus à gauche est celui
d'affectation et les autres, celui de comparaison. Cela évite les ambiguités
au niveau du compilateur entre les 2 opérateurs.


Eric

"jan" wrote in message
news:3bd401c4a0b0$8599e480$

si je fais x = y = z = 255, j'obtient x = 0
si je fais x = 255, j'obtient x = 255

dans la logique je devrais aussi obtenir x = 0


l'operateur de comparaison ne devrait s'appliquer que si
il y a la presence de IF et ca faciliterait certaines
initialisations...







Avatar
Zazar
Bonsoir,

si je fais x = y = z = 255, j'obtient x = 0
si je fais x = 255, j'obtient x = 255

dans la logique je devrais aussi obtenir x = 0



Je ne comprends pas pourquoi en faisant x = 255, vous devriez obtenier x = 0
?

l'operateur de comparaison ne devrait s'appliquer que si
il y a la presence de IF et ca faciliterait certaines
initialisations...



Et si vous voulez initilisez un booleen, vous feriez comment ? :)
Sinon, vous devriez utiliser option explicit, ça vous permettrait de
détecter ce genre de problèmes dés la compilation.

--
Zazar
Avatar
Zazar
Bonsoir,

Étant donné qu'en vb.net, l'opérateur de comparaison et celui


d'affectation
est le même, la norme est que l'opérateur le plus à gauche est celui
d'affectation et les autres, celui de comparaison. Cela évite les


ambiguités
au niveau du compilateur entre les 2 opérateurs.



Je pensais que la règle, c'était qu'une affectation ne renvoyait pas de
valeur et que donc à partir du moment où on utilisait la valeur d'une
opération a=b, c'était l'opérateur de comparaison et sinon, c'était
l'opérateur d'affectation. Cependant, je n'ai pas réussi à trouver de
documentation en faveur de votre version ni de la mienne. Vous pouvez
confirmer ? (Juste par curiosité, je n'ai pas l'intention d'écrire un
compilateur.)

--
Zazar
Avatar
Eric Guillemette
Supposons que l'on fait des manupiluations sur des structures

si j'écris x = y, la valeur de "y" sera copiée dans la variable "x"

supposons:
x = 20
y = 30
z = 10

Retirer l'option strict

z = x = y

Dans la variable z, il y aura false, donc 0 car dans la variable z,
j'affecte le résultat de la comparaison entre x et y. Ce qui me fait arriver
à la conclusion que l'opérateur le plus à gauche est celui d'affectation et
les autres, de comparaison. J'ai lu ça aussi il y a quelques temps dans un
livre, mais je ne me souviens plus lequel. Si je trouve, je t'en ferai part.

L'avantage de C# à ce niveau permet d'affecter la valeur de y dans plusieurs
variables sur une seule ligne de code, c'est probablement ce que l'OP
essayait de faire, mais c'est impossible en VB.Net (du moins dans les
version 1.0 et 1.1 du framework, pour la 2.0, je ne sais pas)

C#:
z = x = y; //y0, x0, z0

Eric

"Zazar" wrote in message
news:
Bonsoir,

Étant donné qu'en vb.net, l'opérateur de comparaison et celui


d'affectation
est le même, la norme est que l'opérateur le plus à gauche est celui
d'affectation et les autres, celui de comparaison. Cela évite les


ambiguités
au niveau du compilateur entre les 2 opérateurs.



Je pensais que la règle, c'était qu'une affectation ne renvoyait pas de
valeur et que donc à partir du moment où on utilisait la valeur d'une
opération a=b, c'était l'opérateur de comparaison et sinon, c'était
l'opérateur d'affectation. Cependant, je n'ai pas réussi à trouver de
documentation en faveur de votre version ni de la mienne. Vous pouvez
confirmer ? (Juste par curiosité, je n'ai pas l'intention d'écrire un
compilateur.)

--
Zazar




Avatar
c2i
Avantage, avantage, j'en suis pas si sur.
C# permet effectivement d'écrire plein de truc en une seule ligne, a telle
point que certaines lignes en deviennent incompréhensibles.
C'est pour cela que je conseille fortement d'éviter, quelque soit le
langage, des "concaténations" excessives.
Ce qui a été confirmé d'ailleurs il y a peu par un dev de l'équipe du
compilateur C#.

Que vaut, a t'on avis x après:
x=4;
x += x++;

LOL

Richard

"Eric Guillemette" a écrit dans le
message de news:
Supposons que l'on fait des manupiluations sur des structures

si j'écris x = y, la valeur de "y" sera copiée dans la variable "x"

supposons:
x = 20
y = 30
z = 10

Retirer l'option strict

z = x = y

Dans la variable z, il y aura false, donc 0 car dans la variable z,
j'affecte le résultat de la comparaison entre x et y. Ce qui me fait


arriver
à la conclusion que l'opérateur le plus à gauche est celui d'affectation


et
les autres, de comparaison. J'ai lu ça aussi il y a quelques temps dans un
livre, mais je ne me souviens plus lequel. Si je trouve, je t'en ferai


part.

L'avantage de C# à ce niveau permet d'affecter la valeur de y dans


plusieurs
variables sur une seule ligne de code, c'est probablement ce que l'OP
essayait de faire, mais c'est impossible en VB.Net (du moins dans les
version 1.0 et 1.1 du framework, pour la 2.0, je ne sais pas)

C#:
z = x = y; //y0, x0, z0

Eric

"Zazar" wrote in message
news:
> Bonsoir,
>
>> Étant donné qu'en vb.net, l'opérateur de comparaison et celui
> d'affectation
>> est le même, la norme est que l'opérateur le plus à gauche est celui
>> d'affectation et les autres, celui de comparaison. Cela évite les
> ambiguités
>> au niveau du compilateur entre les 2 opérateurs.
>
> Je pensais que la règle, c'était qu'une affectation ne renvoyait pas de
> valeur et que donc à partir du moment où on utilisait la valeur d'une
> opération a=b, c'était l'opérateur de comparaison et sinon, c'était
> l'opérateur d'affectation. Cependant, je n'ai pas réussi à trouver de
> documentation en faveur de votre version ni de la mienne. Vous pouvez
> confirmer ? (Juste par curiosité, je n'ai pas l'intention d'écrire un
> compilateur.)
>
> --
> Zazar
>
>




Avatar
Bismark Prods
9

"c2i" a écrit dans le message de
news:%
Avantage, avantage, j'en suis pas si sur.
C# permet effectivement d'écrire plein de truc en une seule ligne, a telle
point que certaines lignes en deviennent incompréhensibles.
C'est pour cela que je conseille fortement d'éviter, quelque soit le
langage, des "concaténations" excessives.
Ce qui a été confirmé d'ailleurs il y a peu par un dev de l'équipe du
compilateur C#.

Que vaut, a t'on avis x après:
x=4;
x += x++;

LOL

Richard

"Eric Guillemette" a écrit dans le
message de news:
> Supposons que l'on fait des manupiluations sur des structures
>
> si j'écris x = y, la valeur de "y" sera copiée dans la variable "x"
>
> supposons:
> x = 20
> y = 30
> z = 10
>
> Retirer l'option strict
>
> z = x = y
>
> Dans la variable z, il y aura false, donc 0 car dans la variable z,
> j'affecte le résultat de la comparaison entre x et y. Ce qui me fait
arriver
> à la conclusion que l'opérateur le plus à gauche est celui d'affectation
et
> les autres, de comparaison. J'ai lu ça aussi il y a quelques temps dans


un
> livre, mais je ne me souviens plus lequel. Si je trouve, je t'en ferai
part.
>
> L'avantage de C# à ce niveau permet d'affecter la valeur de y dans
plusieurs
> variables sur une seule ligne de code, c'est probablement ce que l'OP
> essayait de faire, mais c'est impossible en VB.Net (du moins dans les
> version 1.0 et 1.1 du framework, pour la 2.0, je ne sais pas)
>
> C#:
> z = x = y; //y0, x0, z0
>
> Eric
>
> "Zazar" wrote in message
> news:
> > Bonsoir,
> >
> >> Étant donné qu'en vb.net, l'opérateur de comparaison et celui
> > d'affectation
> >> est le même, la norme est que l'opérateur le plus à gauche est celui
> >> d'affectation et les autres, celui de comparaison. Cela évite les
> > ambiguités
> >> au niveau du compilateur entre les 2 opérateurs.
> >
> > Je pensais que la règle, c'était qu'une affectation ne renvoyait pas


de
> > valeur et que donc à partir du moment où on utilisait la valeur d'une
> > opération a=b, c'était l'opérateur de comparaison et sinon, c'était
> > l'opérateur d'affectation. Cependant, je n'ai pas réussi à trouver de
> > documentation en faveur de votre version ni de la mienne. Vous pouvez
> > confirmer ? (Juste par curiosité, je n'ai pas l'intention d'écrire un
> > compilateur.)
> >
> > --
> > Zazar
> >
> >
>
>




Avatar
Bismark Prods
lol, si j'avais donné une réponse vraie... on aurait criée au bidonnage !

"Bismark Prods" <xanaia#nospam#@urbanet.ch> a écrit dans le message de
news:
9

"c2i" a écrit dans le message de
news:%
> Avantage, avantage, j'en suis pas si sur.
> C# permet effectivement d'écrire plein de truc en une seule ligne, a


telle
> point que certaines lignes en deviennent incompréhensibles.
> C'est pour cela que je conseille fortement d'éviter, quelque soit le
> langage, des "concaténations" excessives.
> Ce qui a été confirmé d'ailleurs il y a peu par un dev de l'équipe du
> compilateur C#.
>
> Que vaut, a t'on avis x après:
> x=4;
> x += x++;
>
> LOL
>
> Richard
>
> "Eric Guillemette" a écrit dans le
> message de news:
> > Supposons que l'on fait des manupiluations sur des structures
> >
> > si j'écris x = y, la valeur de "y" sera copiée dans la variable "x"
> >
> > supposons:
> > x = 20
> > y = 30
> > z = 10
> >
> > Retirer l'option strict
> >
> > z = x = y
> >
> > Dans la variable z, il y aura false, donc 0 car dans la variable z,
> > j'affecte le résultat de la comparaison entre x et y. Ce qui me fait
> arriver
> > à la conclusion que l'opérateur le plus à gauche est celui


d'affectation
> et
> > les autres, de comparaison. J'ai lu ça aussi il y a quelques temps


dans
un
> > livre, mais je ne me souviens plus lequel. Si je trouve, je t'en ferai
> part.
> >
> > L'avantage de C# à ce niveau permet d'affecter la valeur de y dans
> plusieurs
> > variables sur une seule ligne de code, c'est probablement ce que l'OP
> > essayait de faire, mais c'est impossible en VB.Net (du moins dans les
> > version 1.0 et 1.1 du framework, pour la 2.0, je ne sais pas)
> >
> > C#:
> > z = x = y; //y0, x0, z0
> >
> > Eric
> >
> > "Zazar" wrote in message
> > news:
> > > Bonsoir,
> > >
> > >> Étant donné qu'en vb.net, l'opérateur de comparaison et celui
> > > d'affectation
> > >> est le même, la norme est que l'opérateur le plus à gauche est


celui
> > >> d'affectation et les autres, celui de comparaison. Cela évite les
> > > ambiguités
> > >> au niveau du compilateur entre les 2 opérateurs.
> > >
> > > Je pensais que la règle, c'était qu'une affectation ne renvoyait pas
de
> > > valeur et que donc à partir du moment où on utilisait la valeur


d'une
> > > opération a=b, c'était l'opérateur de comparaison et sinon, c'était
> > > l'opérateur d'affectation. Cependant, je n'ai pas réussi à trouver


de
> > > documentation en faveur de votre version ni de la mienne. Vous


pouvez
> > > confirmer ? (Juste par curiosité, je n'ai pas l'intention d'écrire


un
> > > compilateur.)
> > >
> > > --
> > > Zazar
> > >
> > >
> >
> >
>
>




Avatar
Zazar
Bonjour,

Supposons que l'on fait des manupiluations sur des structures

si j'écris x = y, la valeur de "y" sera copiée dans la variable "x"

supposons:
x = 20
y = 30
z = 10

Retirer l'option strict

z = x = y

Dans la variable z, il y aura false, donc 0 car dans la variable z,
j'affecte le résultat de la comparaison entre x et y.



Tout à fait d'accord.
Ce qui me fait arriver
à la conclusion que l'opérateur le plus à gauche est celui d'affectation


et
les autres, de comparaison.



Ca marche dans un cas donc ça marche partout ? :)
Contre exemple :
Console.WriteLine (x = y)
Votre règle ne fonctionne plus ici, contrairement à la mienne (je ne prétend
pas pour autant que c'est la mienne qui est correcte).

J'ai lu ça aussi il y a quelques temps dans un
livre, mais je ne me souviens plus lequel. Si je trouve, je t'en ferai


part.

J'ai épluché toutes les specs du langage, je n'ai rien retrouvé, donc si
vous retombez dessus par hasard, je suis preneur; cependant ne vous embêtez
pas à rechercher ça explicitement.

--
Zazar
Avatar
Eric Guillemette
En effet, votre règle fonctionne dans tous les cas.

En ce qui concerne ce que je disais plus haut, il aurait fallu spécifier que
c'était uniquement dans le cas d'une affectation, donc la règle devrait se
lire comme suit:

Dans une affectation, l'opérateur "=" le plus à gauche est celui
d'affectation alors que que les autres sont ceux de compraraison.

Mais dans le but d'éviter quelques embrouilles, il sera préférable d'opter
pour votre règle. Je la conserverai donc bien gardée en mémoire et
facilement accessible :)

Eric

"Zazar" wrote in message
news:
Bonjour,

Supposons que l'on fait des manupiluations sur des structures

si j'écris x = y, la valeur de "y" sera copiée dans la variable "x"

supposons:
x = 20
y = 30
z = 10

Retirer l'option strict

z = x = y

Dans la variable z, il y aura false, donc 0 car dans la variable z,
j'affecte le résultat de la comparaison entre x et y.



Tout à fait d'accord.
Ce qui me fait arriver
à la conclusion que l'opérateur le plus à gauche est celui d'affectation


et
les autres, de comparaison.



Ca marche dans un cas donc ça marche partout ? :)
Contre exemple :
Console.WriteLine (x = y)
Votre règle ne fonctionne plus ici, contrairement à la mienne (je ne
prétend
pas pour autant que c'est la mienne qui est correcte).

J'ai lu ça aussi il y a quelques temps dans un
livre, mais je ne me souviens plus lequel. Si je trouve, je t'en ferai


part.

J'ai épluché toutes les specs du langage, je n'ai rien retrouvé, donc si
vous retombez dessus par hasard, je suis preneur; cependant ne vous
embêtez
pas à rechercher ça explicitement.

--
Zazar




Avatar
Eric Guillemette
OK, OK, le mot avantage est peut être un peu fort, disons que j'entendais
plutôt par là une possibilité de plus. Je vois tout de même un avantage lors
d'initialisation simple de variables:

x = y = 0;

Mais pour brouiller les pistes un tantinet:

x = 4;
++x += x++ + x;

C'est le genre de ligne de code à écrire lorsque ton patron te dis qu'il ne
te reste que 2 semaines à travailler ou comme question boni à un examen LOL

Eric

"c2i" wrote in message
news:%
Avantage, avantage, j'en suis pas si sur.
C# permet effectivement d'écrire plein de truc en une seule ligne, a telle
point que certaines lignes en deviennent incompréhensibles.
C'est pour cela que je conseille fortement d'éviter, quelque soit le
langage, des "concaténations" excessives.
Ce qui a été confirmé d'ailleurs il y a peu par un dev de l'équipe du
compilateur C#.

Que vaut, a t'on avis x après:
x=4;
x += x++;

LOL

Richard

"Eric Guillemette" a écrit dans le
message de news:
Supposons que l'on fait des manupiluations sur des structures

si j'écris x = y, la valeur de "y" sera copiée dans la variable "x"

supposons:
x = 20
y = 30
z = 10

Retirer l'option strict

z = x = y

Dans la variable z, il y aura false, donc 0 car dans la variable z,
j'affecte le résultat de la comparaison entre x et y. Ce qui me fait


arriver
à la conclusion que l'opérateur le plus à gauche est celui d'affectation


et
les autres, de comparaison. J'ai lu ça aussi il y a quelques temps dans
un
livre, mais je ne me souviens plus lequel. Si je trouve, je t'en ferai


part.

L'avantage de C# à ce niveau permet d'affecter la valeur de y dans


plusieurs
variables sur une seule ligne de code, c'est probablement ce que l'OP
essayait de faire, mais c'est impossible en VB.Net (du moins dans les
version 1.0 et 1.1 du framework, pour la 2.0, je ne sais pas)

C#:
z = x = y; //y0, x0, z0

Eric

"Zazar" wrote in message
news:
> Bonsoir,
>
>> Étant donné qu'en vb.net, l'opérateur de comparaison et celui
> d'affectation
>> est le même, la norme est que l'opérateur le plus à gauche est celui
>> d'affectation et les autres, celui de comparaison. Cela évite les
> ambiguités
>> au niveau du compilateur entre les 2 opérateurs.
>
> Je pensais que la règle, c'était qu'une affectation ne renvoyait pas de
> valeur et que donc à partir du moment où on utilisait la valeur d'une
> opération a=b, c'était l'opérateur de comparaison et sinon, c'était
> l'opérateur d'affectation. Cependant, je n'ai pas réussi à trouver de
> documentation en faveur de votre version ni de la mienne. Vous pouvez
> confirmer ? (Juste par curiosité, je n'ai pas l'intention d'écrire un
> compilateur.)
>
> --
> Zazar
>
>








1 2