What is the difference between (OrElse and Or) and (AndAlso and And)?
Is there any difference in their performances, let say the correctness benefit?? Is there any situation that I shoudn’t use OrElse and AndAlso?
What is the difference between (OrElse and Or) and (AndAlso and And)? Is there
Share
Or/Andwill always evaluate both1 the expressions and then return a result. They are not short-circuiting.OrElse/AndAlsoare short-circuiting. The right expression is only evaluated if the outcome cannot be determined from the evaluation of the left expression alone. (That means:OrElsewill only evaluate the right expression if the left expression is false, andAndAlsowill only evaluate the right expression if the left expression is true.)Assuming that no side effects occur in the expressions and the expressions are not dependent (and any execution overhead is ignored), then they are the same.
However, in many cases it is that the expressions are dependent. For instance, we want to do something when a List is not-Nothing and has more than one element:
This can also be used to avoid an “expensive” computation (or side-effects, ick!):
Personally, I find that
AndAlsoandOrElseare the correct operators to use in all but the 1% – or less, hopefully! – of the cases where a side-effect is desired.Happy coding.
1 An Exception thrown in the first expression will prevent the second expression from being evaluated, but this should hardly be surprising ..