>>>>I think I would use:
>>>>
>>>>
>>>>
do case
>>>> case not this.HaveCar()
>>>> case not this.HaveLicense()
>>>> case this.isDrunk()
>>>> case this.isTired()
>>>> case this.getCar().getTank().isEmpty()
>>>> otherwise
>>>> lCanDrive=.t.
>>>>endcase
>>>>
>>>>I guess there as many ways as programmers <g>
>>>
>>>Not that many ways. I think I side with you that IsDrunk(), IsTired(), and so on are better ways.
>>
>>I actually never use this approach :).
>>
>>It's only that I liked it when I saw it in YAG's code, and thought that if I ever needed something like that, I'd probably go that way. It just happened that I didn't need it, and that the framework (i.e. my boss) prefers separate IFs - in case someone else needs to read my code. So in my current style, the above would be:
>>
l=.t.
>>l= l and this.HaveCar()
>>l= l and this.HaveLicense()
>>...
>>if not l
>> *-- report error
>>endif
>>return l
>>I know, this relies on VFP not executing any code past the point where l becomes .f., but I think the fears that this may change are unbased. The short logic hasn't changed since 1988, then why should it ever change?
>
>warning, with this style you cannot return a NULL value!
The way I do it, l is always a logical. No nulls. Nor do any of the methods have an option of returning a null.