[fpc-pascal] New feature: IfThen() intrinsic

Michael Van Canneyt michael at freepascal.org
Tue Feb 2 10:49:03 CET 2016



On Tue, 2 Feb 2016, Serguei TARASSOV wrote:

> On 02/02/2016 10:29, fpc-pascal-request at lists.freepascal.org wrote:
>> 2016-02-01 10:59 GMT+01:00 Michael Schnell<mschnell at lumino.de>:
>> Same here. I see no reason to differ from it. Introducing new
>> incompatibility is bad idea. For me is good to have booth (Oxygene
>> compatible):
>> 
>> x := iif (a < 3, 1, 2);
>> V := If a < 3 then 1 else 2;
>> 
>> sometimes is better to use first option and sometimes is better to use
>> second option. Both Oxygen compatible and very "pascalish".
> No, the second is always better because safer.
>
> x := iif (Obj = nil, 0, Obj.Value);
> This will raise access violation as a normal function or you depend on 
> compiler implementation for this special case. And you should remember an 
> additional special case of function.
>
> x := iif Obj = nil then 0 else Obj.Value;
> Doesn't raise AV because it's a statement, not function.

It is not a statement, it is an expression.

I prefer
   x := iif Obj = nil then 0 else Obj.Value;
over
   x := if Obj = nil then 0 else Obj.Value;

Because it clearly differentiates between if (a statement) and iif (an
expression)

So the iif in either functional or expression form has my vote.

Michael.



More information about the fpc-pascal mailing list