[Gambas-user] Breaking logical check when coming to a true statement in a IF block

Tobias Boege taboege at ...626...
Fri Nov 22 22:06:41 CET 2013


On Fri, 22 Nov 2013, derox wrote:
> On Fri, 22 Nov 2013, derox wrote:
> > Hi!
> >
> > Though I have limited knowledge of C++, I do believe it has the following
> > functionallity that also could be useful in Gambas:
> >
> > If you have an IF-block with several statements that are to be evaluated,
> > in C++ it will jump out of that evalutaion proccess as soon as it
> > encounters a true statement. That way you can put procedure-calls from the
> > IF-block that would normally crash the program if the prior checks are
> > TRUE, but otherwise would run successfully.
> >
> 
> Well... I think you mean: jumps out of a chain of ORs when a TRUE statement
> is reached and jumps out of a chain of ANDs when a FALSE statement is
> reached?
> 
> > Just a silly example
> >
> > If(itsWinterTime OR iceCreamWagonIsOpen) Then 'There are no Ice Wagons
> > around in Winter, and the program will wonder what you are talking about
> > and go crash sending out an Error message, but if it is summer time, there
> > will be a ice wagon, but it is not neccessarily open :)
> >    ...
> > End if
> 
> This is called short-circuit evaluation and Gambas has it. Look at... the
> documentation of If[0].
> 
> Regards,
> Tobi
> 
> Hehe, yes - this is what I meant, but I struggeled to find the right terms
> that you so well presented here. Life get's easier when you know the right
> words :p
> 
> I though I found my code running after a TRUE statement was passed...
> that's why I made the suggestion, but I must have missed something :)
> 

Yeah, Gambas uses a slightly different syntax:

If bExpr And bExpr2 Then
  ' ...
Endif

is normal non-short circuit. But if you use the And If operator:

If bExpr And If bExpr2 Then
  ' ...
Endif

then you get what you want.

Regards,
Tobi




More information about the User mailing list