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

And et Or

16 réponses
Avatar
Patrice Henrio
Comme l'indique l'exemple ci-dessous, lors de l'évaluation de "A or B", Vb
évalue A et B, même si c'est inutile puisque quelque soit la valeur
booléenne de B, le résultat est True.

Private Sub Command1_Click()
Dim X As Integer
Dim B As Boolean
B = True Or ((1 / X) = 0)
Debug.Print B
End Sub

Existe-t-il un moyen en Vb pour que l'évaluation d'une suite de "ou"
s'arrête dés que l'on rencontre True, et celle d'une suite de And, dés qu'on
rencontre False ?

10 réponses

1 2
Avatar
Zoury
Nope! :O/
Mais c'est possible avec .Net

--
Cordialement
Yanick
MVP pour Visual Basic
"Patrice Henrio" a écrit dans le message de
news:%23IGFhaM%
Comme l'indique l'exemple ci-dessous, lors de l'évaluation de "A or B", Vb
évalue A et B, même si c'est inutile puisque quelque soit la valeur
booléenne de B, le résultat est True.

Private Sub Command1_Click()
Dim X As Integer
Dim B As Boolean
B = True Or ((1 / X) = 0)
Debug.Print B
End Sub

Existe-t-il un moyen en Vb pour que l'évaluation d'une suite de "ou"
s'arrête dés que l'on rencontre True, et celle d'une suite de And, dés


qu'on
rencontre False ?




Avatar
LE TROLL
Bonsoire, mais en boucle, ou avec un Do, un If, ça ne marche pas?

for i = 1 to maxi_variable
if variable(i) <> true then
' ---> ???
endif
next i
-----
en boucle on peut ainsi compter l nombre de true ou false...
compte=0
for i = 1 to maxi_variable
if variable(i) = true then compte=compte + 1
next i

Sauf si je n'ai rien compris... Bonne soirée :o)
-------


"Patrice Henrio" a écrit dans le message de
news: %23IGFhaM%
Comme l'indique l'exemple ci-dessous, lors de l'évaluation de "A or B", Vb
évalue A et B, même si c'est inutile puisque quelque soit la valeur
booléenne de B, le résultat est True.

Private Sub Command1_Click()
Dim X As Integer
Dim B As Boolean
B = True Or ((1 / X) = 0)
Debug.Print B
End Sub

Existe-t-il un moyen en Vb pour que l'évaluation d'une suite de "ou"
s'arrête dés que l'on rencontre True, et celle d'une suite de And, dés
qu'on rencontre False ?



Avatar
Zoury
Salut Joe!

ça pourrais être fesable, seulement ça demande **beaucoup** plus de
traitement que de faire la comparaison Or standard. Le but initial de la
manoeuvre était d'accélérer ce traitement et parfois d'éviter que la
deuxième expression plante.


--
Cordialement
Yanick
MVP pour Visual Basic

"LE TROLL" <le a écrit dans le message de
news:edMn%23xM%
Bonsoire, mais en boucle, ou avec un Do, un If, ça ne marche pas?

for i = 1 to maxi_variable
if variable(i) <> true then
' ---> ???
endif
next i
-----
en boucle on peut ainsi compter l nombre de true ou false...
compte=0
for i = 1 to maxi_variable
if variable(i) = true then compte=compte + 1
next i

Sauf si je n'ai rien compris... Bonne soirée :o)
-------


"Patrice Henrio" a écrit dans le message de
news: %23IGFhaM%
> Comme l'indique l'exemple ci-dessous, lors de l'évaluation de "A or B",


Vb
> évalue A et B, même si c'est inutile puisque quelque soit la valeur
> booléenne de B, le résultat est True.
>
> Private Sub Command1_Click()
> Dim X As Integer
> Dim B As Boolean
> B = True Or ((1 / X) = 0)
> Debug.Print B
> End Sub
>
> Existe-t-il un moyen en Vb pour que l'évaluation d'une suite de "ou"
> s'arrête dés que l'on rencontre True, et celle d'une suite de And, dés
> qu'on rencontre False ?
>




Avatar
Patrice Henrio
C'est bien ce qu'il me semblait.
Je crois me souvenir que dans un langage que j'utilisais on pouvait
paramétrer la compilation pour qu'il ne tste que ce qu'il fallait pour des
suites de or ou de and.
De plus en Lisp, il y a 15 ans, par défaut l' évaluation dans ce cas se
faisait jusqu'à ce que le résulatta soit connu (donc un True pour or et un
False pour And).
Tant pis. Je voulais être sûr.

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news: %23Jae3%23M%
Salut Joe!

ça pourrais être fesable, seulement ça demande **beaucoup** plus de
traitement que de faire la comparaison Or standard. Le but initial de la
manoeuvre était d'accélérer ce traitement et parfois d'éviter que la
deuxième expression plante.


--
Cordialement
Yanick
MVP pour Visual Basic

"LE TROLL" <le a écrit dans le message de
news:edMn%23xM%
Bonsoire, mais en boucle, ou avec un Do, un If, ça ne marche pas?

for i = 1 to maxi_variable
if variable(i) <> true then
' ---> ???
endif
next i
-----
en boucle on peut ainsi compter l nombre de true ou false...
compte=0
for i = 1 to maxi_variable
if variable(i) = true then compte=compte + 1
next i

Sauf si je n'ai rien compris... Bonne soirée :o)
-------


"Patrice Henrio" a écrit dans le message de
news: %23IGFhaM%
> Comme l'indique l'exemple ci-dessous, lors de l'évaluation de "A or B",


Vb
> évalue A et B, même si c'est inutile puisque quelque soit la valeur
> booléenne de B, le résultat est True.
>
> Private Sub Command1_Click()
> Dim X As Integer
> Dim B As Boolean
> B = True Or ((1 / X) = 0)
> Debug.Print B
> End Sub
>
> Existe-t-il un moyen en Vb pour que l'évaluation d'une suite de "ou"
> s'arrête dés que l'on rencontre True, et celle d'une suite de And, dés
> qu'on rencontre False ?
>








Avatar
dark poulpo
> Comme l'indique l'exemple ci-dessous, lors de l'évaluation de "A or B", Vb
évalue A et B, même si c'est inutile puisque quelque soit la valeur
booléenne de B, le résultat est True.

Private Sub Command1_Click()
Dim X As Integer
Dim B As Boolean
B = True Or ((1 / X) = 0)
Debug.Print B
End Sub

Existe-t-il un moyen en Vb pour que l'évaluation d'une suite de "ou"
s'arrête dés que l'on rencontre True, et celle d'une suite de And, dés


qu'on
rencontre False ?




non, c'est le compilateur qui est comme ca et sa façon de gerer les
expressions

peut etre qu'un simple (en remplacant true par un test pour l'exemple)

----------------
b= false;

if v = True then
B=True
else if (1 / X) = 0 then
B = True
end if

----- ou ------
b= true;

if v = True
else if (1 / X) = 0 then
else
B = False
end if

---- ou -------

b= true;
if v <> True and (1 / X) = 0 then ' ca peut etre bien aussi dans le cas
ou le test est rarement vrai (mais on pourait en dire autant de ton exemple
aussi)
B = False
end if



fo comparer ca avec l'exemple que tu as cité au niveau de nombre de cycle
processeur

de toute facon, si VB6 gérait l'evaluation d'expression de maniere
optimisée, il ferait un test de saut. ce qui ressemblerai a peu de chose
pres a ce qui est au dessus (surtout le 1er exemple)


--
-----
http://dark.freezee.org/
Avatar
dark poulpo
jai fait 2 petites erreurs de tapes

if v = True (exemple 2)


il manque le then

if v <> True and (1 / X) = 0 (exemple 3)


il fo lire if v <> True and (1 / X) <> 0 then
Avatar
dark poulpo
ya meme mieux, si il testait les resultats des expressions composé de
valeurs constantes directement à la compil il te compilerai juste

b=true 'le reste ne serait meme inclu

mais bon, ce n'est pas pour rien que c'est du VB!!!


--
-----
http://dark.freezee.org/
Avatar
Pascal B.
Bonjour,

(Petite précision)
Il est INUTILE d'écrire:
- If V = True Then
écrire a la place:
- If V Then

et:
- If V <> True Then ou If V = False Then
s'écrira:
- If Not V Then

Cordialement
Pascal B.

"dark poulpo" wrote in message news:41e5a21a$0$25813$
| > Comme l'indique l'exemple ci-dessous, lors de l'évaluation de "A or B", Vb
| > évalue A et B, même si c'est inutile puisque quelque soit la valeur
| > booléenne de B, le résultat est True.
| >
| > Private Sub Command1_Click()
| > Dim X As Integer
| > Dim B As Boolean
| > B = True Or ((1 / X) = 0)
| > Debug.Print B
| > End Sub
| >
| > Existe-t-il un moyen en Vb pour que l'évaluation d'une suite de "ou"
| > s'arrête dés que l'on rencontre True, et celle d'une suite de And, dés
| qu'on
| > rencontre False ?
| >
|
| non, c'est le compilateur qui est comme ca et sa façon de gerer les
| expressions
|
| peut etre qu'un simple (en remplacant true par un test pour l'exemple)
|
| ----------------
| b= false;
|
| if v = True then
| B=True
| else if (1 / X) = 0 then
| B = True
| end if
|
| ----- ou ------
| b= true;
|
| if v = True
| else if (1 / X) = 0 then
| else
| B = False
| end if
|
| ---- ou -------
|
| b= true;
| if v <> True and (1 / X) = 0 then ' ca peut etre bien aussi dans le cas
| ou le test est rarement vrai (mais on pourait en dire autant de ton exemple
| aussi)
| B = False
| end if
|
|
|
| fo comparer ca avec l'exemple que tu as cité au niveau de nombre de cycle
| processeur
|
| de toute facon, si VB6 gérait l'evaluation d'expression de maniere
| optimisée, il ferait un test de saut. ce qui ressemblerai a peu de chose
| pres a ce qui est au dessus (surtout le 1er exemple)
|
|
| --
| -----
| http://dark.freezee.org/
|
|
Avatar
dark poulpo
> (Petite précision)
Il est INUTILE d'écrire:
- If V = True Then
écrire a la place:
- If V Then

et:
- If V <> True Then ou If V = False Then
s'écrira:
- If Not V Then




merci, mais on s'ecarte, jai fait expres de mettre un test de comparaison
javais ecrit "(en remplacant true par un test pour l'exemple)"


--
-----
http://dark.freezee.org/
Avatar
Pascal B.
En fait, je pensait qu'on parlait de performance et donc
- If V Then
est "plus mieux" que
- If V = True Then

(sans vouloir pinailler)

Pascal B.

"dark poulpo" wrote in message news:41e62f76$0$7111$
| > (Petite précision)
| > Il est INUTILE d'écrire:
| > - If V = True Then
| > écrire a la place:
| > - If V Then
| >
| > et:
| > - If V <> True Then ou If V = False Then
| > s'écrira:
| > - If Not V Then
| >
|
| merci, mais on s'ecarte, jai fait expres de mettre un test de comparaison
| javais ecrit "(en remplacant true par un test pour l'exemple)"
|
|
| --
| -----
| http://dark.freezee.org/
|
|
1 2