Hi, I am new to vb.net. In using the If condition, can we
use either of And or AndAlso. Whats the difference ? In VB
I have always used And.
For eg.
if num > 10 AndAlso num < 20
Thanks.
Matt 22 3509
"Matt" <an*******@discussions.microsoft.com> wrote in message
news:01****************************@phx.gbl... Hi, I am new to vb.net. In using the If condition, can we use either of And or AndAlso. Whats the difference ?
The "AndAlso" operator uses "short-circuit" evaluation - if the
First condition is False, the second isn't even evaluated. Useful
for things like this:
dataSet = FunctionThatReturnsADataSet_OrNothing()
' Did I get a DataSet with just one row in it?
If Not ( dataSet Is Nothing ) _
AndAlso dataSet.Tables( 0 ).Rows = 1 _
Then
"And" always works out /both/ expressions.
HTH,
Phill W.
*And* evaluates both Expression1 and Expression2. Whereas, *AndAlso*,
provides a means to perform short-circuiting the evaluation process is some
cases.
False AndAlso True will only evaluate the 'False' and knows it does not
need to evaluate the 'True' because it already has its answer. This can help
performance if used in a loop.
Regards - OHM
Matt wrote: Hi, I am new to vb.net. In using the If condition, can we use either of And or AndAlso. Whats the difference ? In VB I have always used And. For eg. if num > 10 AndAlso num < 20
Thanks. Matt
--
Best Regards - OHM
O_H_M{at}BTInternet{dot}com
In addition to the comments mentioned, there is also an "orelse" operator
which does lazy evaluation using the or operator
e.g.
If True orelse MyReallySlowFunction() Then
MyReallySlowFunction() will never get called because "orelse" has evaluated
True and so does not need to evaluate MyReallySlowFunction()
HTH,
Trev.
In the case of "if x and y": this is true if both x and y are true.
In the case of "if x andalso y": this is true only if x is true
regardless of the value of y, and if x is true and y is true.
Basically ANDALSO is the same as regular AND except that the first value
you are testing MUST be true to evaluate as true.
Is that confusing enough?
Matt wrote: Hi, I am new to vb.net. In using the If condition, can we use either of And or AndAlso. Whats the difference ? In VB I have always used And. For eg. if num > 10 AndAlso num < 20
Thanks. Matt
On 2004-01-09, copyco <co****@anon.com> wrote: In the case of "if x and y": this is true if both x and y are true.
In the case of "if x andalso y": this is true only if x is true regardless of the value of y, and if x is true and y is true.
Umm, no. Read the rest of the thread for details, but if x is true
and y is false, ' x andalso y' will evaluate to false.
Basically ANDALSO is the same as regular AND except that the first value you are testing MUST be true to evaluate as true.
Again, no. (and this definition is different than your first
definition, but both are wrong).
Is that confusing enough?
Yes, which is why it's not done that way.
More specifically, 'x and y' and 'x andalso y' will always evaluate to
the same value for boolean values, either true or false.
Postscript: Actually, I suppose that's only true if evaluation order is
guaranteed with the 'And' operator, and I can't find anything that says
it is. So a minor caveat.
--
David
dfoster at
hotpop dot com
Just a useless trivia note:
The real terms for these operations are short-circuiting logical disjunction
(orelse), and short-circuiting logical conjunction (andalso), which most
people refer to as "short-circuited", or "lazy." In .NET it's used for
logical operators, but the concept is broad and could be applied to any
chain of logic.
It basically means, stop processing as soon as possible. Like playing
basketball best 3 out of 5, you don't need to actually play all five games
unless both teams win twice.
~
Jeremy
"Matt" <an*******@discussions.microsoft.com> wrote in message
news:01****************************@phx.gbl... Hi, I am new to vb.net. In using the If condition, can we use either of And or AndAlso. Whats the difference ? In VB I have always used And. For eg. if num > 10 AndAlso num < 20
Thanks. Matt
David wrote: On 2004-01-09, copyco <co****@anon.com> wrote:
In the case of "if x and y": this is true if both x and y are true.
In the case of "if x andalso y": this is true only if x is true regardless of the value of y, and if x is true and y is true.
Umm, no. Read the rest of the thread for details, but if x is true and y is false, ' x andalso y' will evaluate to false.
What you just said is what I said, or tried to say. Perhaps you didn't
understand what I wrote, or I didn't word it correctly. So we are in
agreement here.
Basically ANDALSO is the same as regular AND except that the first value you are testing MUST be true to evaluate as true.
Again, no. (and this definition is different than your first definition, but both are wrong).
According to the table given in the help file, what I said is correct.
The first value you are testing must be true in order for it to evaluate
to true regarless of the second value. And only when both values are
true does it evaluate to true. See the table below.
If expression1 is / And expression2 is / Value of result is
True True True
True False False
False (not evaluated) False
Is that confusing enough?
Yes, which is why it's not done that way.
More specifically, 'x and y' and 'x andalso y' will always evaluate to the same value for boolean values, either true or false.
Postscript: Actually, I suppose that's only true if evaluation order is guaranteed with the 'And' operator, and I can't find anything that says it is. So a minor caveat.
On 2004-01-09, copyco <co****@anon.com> wrote:
David wrote:
On 2004-01-09, copyco <co****@anon.com> wrote:
In the case of "if x and y": this is true if both x and y are true.
In the case of "if x andalso y": this is true only if x is true regardless of the value of y, and if x is true and y is true.
Umm, no. Read the rest of the thread for details, but if x is true and y is false, ' x andalso y' will evaluate to false.
What you just said is what I said, or tried to say. Perhaps you didn't understand what I wrote, or I didn't word it correctly. So we are in agreement here.
Perhaps so, but why don't we rephrase your original statement?
In the case of "if x and y": this is true if both x and y are true.
In the case of "if x andalso y": this is true if both x and y are true.
Period. End of discussion as far as the value of the operation goes.
But then what does this phrase fragment mean? In the case of "if x andalso y": this is true only if x is true regardless of the value of y...
Basically ANDALSO is the same as regular AND except that the first value you are testing MUST be true to evaluate as true.
Again, no. (and this definition is different than your first definition, but both are wrong).
According to the table given in the help file, what I said is correct.
No, the table's not the point here. Both 'And' and 'AndAlso' share
the same table. The problem above is the word "except", since in
both cases the first value MUST be true for the phrase to evaluate
as true. In other words, "the first value you are testing MUST
be true to evaluate as true" is true of both 'And' and 'AndAlso',
so the word "except" makes no sense here.
Now if you really understand this and there's just some grammatical
confusion, then no big deal. But you keep trying to point out
the And/AndAlso difference by saying something about the value
of 'X And Y' vs. 'X AndAlso Y', and that's just not the difference
between the two operators.
The first value you are testing must be true in order for it to evaluate to true regarless of the second value.
Likewise the second value must be true in order for it to evaluate to
true regardless of the first value.
Those two combined is simply is a very longwinded way of simply
saying...
only when both values are true does it evaluate to true.
And the lines above are true of the 'And' operator as well, so that
hardly points out the difference between them.
--
David
dfoster at
hotpop dot com
You're right. Now go have a cup of hot chocolate.
David wrote: On 2004-01-09, copyco <co****@anon.com> wrote:
David wrote:
On 2004-01-09, copyco <co****@anon.com> wrote:
In the case of "if x and y": this is true if both x and y are true.
In the case of "if x andalso y": this is true only if x is true regardless of the value of y, and if x is true and y is true.
Umm, no. Read the rest of the thread for details, but if x is true and y is false, ' x andalso y' will evaluate to false.
What you just said is what I said, or tried to say. Perhaps you didn't understand what I wrote, or I didn't word it correctly. So we are in agreement here.
Perhaps so, but why don't we rephrase your original statement?
In the case of "if x and y": this is true if both x and y are true.
In the case of "if x andalso y": this is true if both x and y are true.
Period. End of discussion as far as the value of the operation goes.
But then what does this phrase fragment mean?
In the case of "if x andalso y": this is true only if x is true regardless of the value of y...
Basically ANDALSO is the same as regular AND except that the first value you are testing MUST be true to evaluate as true.
Again, no. (and this definition is different than your first definition, but both are wrong).
According to the table given in the help file, what I said is correct.
No, the table's not the point here. Both 'And' and 'AndAlso' share the same table. The problem above is the word "except", since in both cases the first value MUST be true for the phrase to evaluate as true. In other words, "the first value you are testing MUST be true to evaluate as true" is true of both 'And' and 'AndAlso', so the word "except" makes no sense here.
Now if you really understand this and there's just some grammatical confusion, then no big deal. But you keep trying to point out the And/AndAlso difference by saying something about the value of 'X And Y' vs. 'X AndAlso Y', and that's just not the difference between the two operators.
The first value you are testing must be true in order for it to evaluate to true regarless of the second value.
Likewise the second value must be true in order for it to evaluate to true regardless of the first value.
Those two combined is simply is a very longwinded way of simply saying...
only when both values are true does it evaluate to true.
And the lines above are true of the 'And' operator as well, so that hardly points out the difference between them.
Tut, Tut, you know we only serve coffee in here :)
copyco wrote: You're right. Now go have a cup of hot chocolate.
David wrote: On 2004-01-09, copyco <co****@anon.com> wrote:
David wrote:
On 2004-01-09, copyco <co****@anon.com> wrote:
> In the case of "if x and y": this is true if both x and y are > true. > > In the case of "if x andalso y": this is true only if x is true > regardless of the value of y, and if x is true and y is true.
Umm, no. Read the rest of the thread for details, but if x is true and y is false, ' x andalso y' will evaluate to false.
What you just said is what I said, or tried to say. Perhaps you didn't understand what I wrote, or I didn't word it correctly. So we are in agreement here.
Perhaps so, but why don't we rephrase your original statement?
In the case of "if x and y": this is true if both x and y are true.
In the case of "if x andalso y": this is true if both x and y are true.
Period. End of discussion as far as the value of the operation goes.
But then what does this phrase fragment mean?
> In the case of "if x andalso y": this is true only if x is true > regardless of the value of y... > Basically ANDALSO is the same as regular AND except that the > first value you are testing MUST be true to evaluate as true.
Again, no. (and this definition is different than your first definition, but both are wrong).
According to the table given in the help file, what I said is correct.
No, the table's not the point here. Both 'And' and 'AndAlso' share the same table. The problem above is the word "except", since in both cases the first value MUST be true for the phrase to evaluate as true. In other words, "the first value you are testing MUST be true to evaluate as true" is true of both 'And' and 'AndAlso', so the word "except" makes no sense here.
Now if you really understand this and there's just some grammatical confusion, then no big deal. But you keep trying to point out the And/AndAlso difference by saying something about the value of 'X And Y' vs. 'X AndAlso Y', and that's just not the difference between the two operators.
The first value you are testing must be true in order for it to evaluate to true regarless of the second value.
Likewise the second value must be true in order for it to evaluate to true regardless of the first value.
Those two combined is simply is a very longwinded way of simply saying...
only when both values are true does it evaluate to true.
And the lines above are true of the 'And' operator as well, so that hardly points out the difference between them.
--
Best Regards - OHM
O_H_M{at}BTInternet{dot}com
On 2004-01-10, copyco <co****@anon.com> wrote: You're right. Now go have a cup of hot chocolate.
Is a cuppa Joe OK?
I know it seems a bit nit-picky to belabor points like this, but the
problem is that many more people read Usenet than post to it. I know
I've been steered wrong before when I read a post and thought to myself
"Well, if that were untrue somebody would have responded, so that must
be how things are".
--
David
dfoster at
hotpop dot com
It seem to me that the best explanation for AndAlso is this:
If x andalso y then...
whatever
endif
is equivalent to
If x then
if y then
whatever
endif
endif
On the other hand, And can give different results than does AndAlso or the
multiple if scenario. When using the same operator as a bitwise logical
"And" you have to be cautious.
I ran the following code
\\\\\\\\\\\\\\\\\\\\
Dim flag As Integer
flag = &H10 + &H8
If (flag And &H10) And (flag And &H8) Then
MsgBox("true branch of if using 'And'")
Else
MsgBox("false branch of if using 'And'")
End If
If (flag And &H10) AndAlso (flag And &H8) Then
MsgBox("true branch of if using 'AndAlso'")
Else
MsgBox("false branch of if using 'AndAlso'")
End If
If (flag And &H10) Then
If (flag And &H8) Then
MsgBox("true branch of if using 'Nested If'")
Else
MsgBox("false branch of if using 'Nested If'")
End If
End If
////////////
The results are False, True and True (in order).
Regards,
Ot
On 2004-01-10, Ot <ur***@tds.invalid> wrote: On the other hand, And can give different results than does AndAlso or the multiple if scenario. When using the same operator as a bitwise logical "And" you have to be cautious.
I ran the following code
\\\\\\\\\\\\\\\\\\\\ Dim flag As Integer
flag = &H10 + &H8
If (flag And &H10) And (flag And &H8) Then
Luckily, this won't compile with Option Strict On
--
David
dfoster at
hotpop dot com
Hi David,
What good that you can set it off is it not, than you can show good the
essentials of things.
But did you think there was something wrong with the sample?
I thought it was a good explanation?
Cor
Yes, indeed. If you use Cast you can get what you want.
If CBool(flag And &H10) And CBool(flag And &H8) Then
MsgBox("true branch of if using 'And'")
Else
MsgBox("false branch of if using 'And'")
End If
This version yields "true", regardless of the setting of the Strict Option.
"David" <df*****@127.0.0.1> wrote in message
news:sl********************@woofix.local.dom... On 2004-01-10, Ot <ur***@tds.invalid> wrote: On the other hand, And can give different results than does AndAlso or
the multiple if scenario. When using the same operator as a bitwise
logical "And" you have to be cautious.
I ran the following code
\\\\\\\\\\\\\\\\\\\\ Dim flag As Integer
flag = &H10 + &H8
If (flag And &H10) And (flag And &H8) Then
Luckily, this won't compile with Option Strict On
Yes, indeed. If you use Cast you can get what you want. As I said "be
cautious."
If CBool(flag And &H10) And CBool(flag And &H8) Then
MsgBox("true branch of if using 'And'")
Else
MsgBox("false branch of if using 'And'")
End If
This version yields "true", regardless of the setting of the Strict Option.
I should really learn the difference between ctl-C and ctl-X. I intended
to cut/paste my reply to the bottom. Oh well.
"Ot" <ur***@tds.invalid (use net)> wrote in message
news:%2****************@TK2MSFTNGP11.phx.gbl... Yes, indeed. If you use Cast you can get what you want.
If CBool(flag And &H10) And CBool(flag And &H8) Then
MsgBox("true branch of if using 'And'")
Else
MsgBox("false branch of if using 'And'")
End If
This version yields "true", regardless of the setting of the Strict
Option. "David" <df*****@127.0.0.1> wrote in message news:sl********************@woofix.local.dom... On 2004-01-10, Ot <ur***@tds.invalid> wrote: On the other hand, And can give different results than does AndAlso
or the multiple if scenario. When using the same operator as a bitwise logical "And" you have to be cautious.
I ran the following code
\\\\\\\\\\\\\\\\\\\\ Dim flag As Integer
flag = &H10 + &H8
If (flag And &H10) And (flag And &H8) Then Luckily, this won't compile with Option Strict On
Yes, indeed. If you use Cast you can get what you want. As I said "be cautious."
If CBool(flag And &H10) And CBool(flag And &H8) Then
MsgBox("true branch of if using 'And'")
Else
MsgBox("false branch of if using 'And'")
End If
This version yields "true", regardless of the setting of the Strict
Option.
On 2004-01-10, Cor <no*@non.com> wrote: What good that you can set it off is it not, than you can show good the essentials of things.
But did you think there was something wrong with the sample? I thought it was a good explanation?
So did I, I was just adding some info. It's not just a good
explanation, but also a good example of one of the problems with the
overloaded 'And' operator.
--
David
dfoster at
hotpop dot com
On 2004-01-10, Ot <ur***@tds.invalid> wrote: Yes, indeed. If you use Cast you can get what you want.
If CBool(flag And &H10) And CBool(flag And &H8) Then
MsgBox("true branch of if using 'And'") Else MsgBox("false branch of if using 'And'") End If
This version yields "true", regardless of the setting of the Strict Option.
Yep, although I usually recommend to people that they stop using the
'And' operator for boolean expressions and use AndAlso and OrElse
exclusively. I realize there's a readability argument for 'And', but I
find AndAlso just as readable and it's less error-prone.
--
David
dfoster at
hotpop dot com
Provided that you are evaluating Boolean values, One scenario
where AND may be a better option is when you
have the evaluation of a function.
FunctionA(X) And FunctionB(X)
It may be required that FunctionB is called, in which case, if
you wanted to use AndAlso, then you would have had to have
called the function first and assigned its Value to another variable
then use that as the right hand side of AndAlso.
AndAlso, makes for better readability as it is an evaluation of
Boolean values, not a bitwise AND.
Additionally, if using AndAlso, use the condition most likely
to return False, on the left hand side, this improves performance.
Regards - OHM
David wrote: On 2004-01-10, Ot <ur***@tds.invalid> wrote: Yes, indeed. If you use Cast you can get what you want.
If CBool(flag And &H10) And CBool(flag And &H8) Then
MsgBox("true branch of if using 'And'") Else MsgBox("false branch of if using 'And'") End If
This version yields "true", regardless of the setting of the Strict Option.
Yep, although I usually recommend to people that they stop using the 'And' operator for boolean expressions and use AndAlso and OrElse exclusively. I realize there's a readability argument for 'And', but I find AndAlso just as readable and it's less error-prone.
--
Best Regards - OHM
O_H_M{at}BTInternet{dot}com
On Sat, 10 Jan 2004 09:13:55 -0600, Otuse net wrote: CBool(flag And &H10)
IMHO, it makes no sense to convert an integer to a Boolean. A boolean is
either True or False and has no value. I realize that there are API
functions that return 1 or some other integer to mean "true" but I think
you should test for that explicit condition:
If retval = 1 Then
Instead of
If CBool(retval) Then
Just my 2/100 of a dollar.
--
Chris
To send me an E-mail, remove the underscores and lunchmeat from my E-Mail
address.
"Chris Dunaway" <dunawayc@_lunchmeat_sbcglobal.net> wrote in message
news:13*****************************@40tude.net... On Sat, 10 Jan 2004 09:13:55 -0600, Otuse net wrote: I realize that there are API functions that return 1 or some other integer to mean "true" but I think you should test for that explicit condition:
If retval = 1 Then Instead of If CBool(retval) Then
ACK. You could even take this one step further (if you are using *alot* of
integer results):
Public Const iTrue as Integer = 1
...
If retval = iTrue then
Just to eliminate magic numbers & make the flag more flexable.
~
Jeremy
The thing is, if flag And &H10 (an integer) is non-zero, it is &H10.
However, CBool(flag And &H10) will convert it to a field of all 1 bits
which is boolean "true." But that is only an implementation issue. You
are right that any individual implementation can use any internal
representation. Perhaps the best way is to do exactly what you are meaning
by doing the bitwise And: if (flag And &H10) <> 0 then.
"Chris Dunaway" <dunawayc@_lunchmeat_sbcglobal.net> wrote in message
news:13*****************************@40tude.net... On Sat, 10 Jan 2004 09:13:55 -0600, Otuse net wrote:
CBool(flag And &H10)
IMHO, it makes no sense to convert an integer to a Boolean. A boolean is either True or False and has no value. I realize that there are API functions that return 1 or some other integer to mean "true" but I think you should test for that explicit condition:
If retval = 1 Then
Instead of
If CBool(retval) Then
Just my 2/100 of a dollar.
-- Chris
To send me an E-mail, remove the underscores and lunchmeat from my E-Mail address. This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Mike Hale |
last post by:
Is it better to use AndAlso and OrElse by default rather than the regual And
& Or?
MikeH
|
by: A Traveler |
last post by:
I was just curious if anyone knows how the combinations of And/AndAlso and
Or/OrElse compare in terms of performance.
Which takes more work for the system, performing two evaluations on an And
or...
|
by: Lior |
last post by:
Hello .
I know that the AndAlso and OrElse statements are short-circuiting And and
Or statements ,
respectively .
Should I always use (I don't like the word "always" ...) AndAlso instead of...
|
by: =?Utf-8?B?UmljaA==?= |
last post by:
Greetings,
If x = y And m = n The
....
End If
If x = y AndAlso m = n Then
....
End If
|
by: Al G |
last post by:
Ok, so I've started to use it, and it is quicker.
Now, why is it that "AND" doesn't already work this way?
Al G
|
by: Siegfried Heintze |
last post by:
Are there operators in C# that are the counterparts of "OrElse" and
"AndAlso" that I can use when translating the following program from VB.NET
to C#?
Thanks,
Siegfried
Namespace vbtest...
|
by: Euvin |
last post by:
I am kind of confuse as to how these operators work:
AndAlso and OrElse
Anyone care to explain. Some examples would be great!
|
by: ryjfgjl |
last post by:
ExcelToDatabase: batch import excel into database automatically...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM).
In this month's session, we are pleased to welcome back...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM).
In this month's session, we are pleased to welcome back...
|
by: Vimpel783 |
last post by:
Hello!
Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
|
by: PapaRatzi |
last post by:
Hello,
I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
|
by: CloudSolutions |
last post by:
Introduction:
For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
|
by: Defcon1945 |
last post by:
I'm trying to learn Python using Pycharm but import shutil doesn't work
|
by: Shællîpôpï 09 |
last post by:
If u are using a keypad phone, how do u turn on JavaScript, to access features like WhatsApp, Facebook, Instagram....
|
by: af34tf |
last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you
| |