Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Short-Circuiting with Logical Operators
Message
From
28/10/2014 08:46:27
Dragan Nedeljkovich
Now officially retired
Zrenjanin, Serbia
 
 
To
28/10/2014 03:08:47
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Environment versions
Visual FoxPro:
VFP 9 SP1
OS:
Windows Server 2003
Network:
Windows 2008 Server
Database:
MS SQL Server
Application:
Web
Miscellaneous
Thread ID:
01609995
Message ID:
01610019
Views:
62
Likes (1)
>In one of my apps I just found and fixed a subtle edge-case bug caused by short-circuiting of logical operators. With my coding style I'm not usually vulnerable to it so it was interesting to be reminded of this feature of VFP.

Whoever needs the reminder... it's been drilled into me that any compiler will shortcircuit your logicals, period. And I take that into account whenever I'm coding. I've seen a few experienced guys do things like this
do case
   case not .FirstProcessGoesWell()
   case not .SecondProcessGoesWell()
...
   case not .LastProcessGoesWell()
   otherwise
      oMsg.Message("all is well")
endcase
...which is, for me, perhaps the neatest packaging of multiphase batch process, which needs to be abandoned on first critical error. Can't remember whom I first saw doing this, perhaps the Feltmans or someone around the ComCodebook project. This is shortcircuiting by design.

However, I've found a case where I'd expect shortcircuiting to work, but it doesn't. It's the evl() and nvl() functions, where both parameters are evaluated, regardless of what the first one returns. So if you try

xx=evl(call1(), call2())

call2 will be called no matter what call1 does. This is kind of counterintuitive, because the equivalent construct with iif() will not have this side effect.

back to same old

the first online autobiography, unfinished by design
What, me reckless? I'm full of recks!
Balkans, eh? Count them.
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform