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

Serguei TARASSOV serge at arbinada.com
Tue Feb 2 11:12:34 CET 2016


On 02/02/2016 10:54, fpc-pascal-request at lists.freepascal.org wrote:

> On Tue, 2 Feb 2016, Michael Van Canneyt wrote
>>
>> On Tue, 2 Feb 2016, Serguei TARASSOV wrote: > 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.
???
iif is a new statement "inline if".
It contains other statements "then" "else"
It returns a value like an assignment statement ":=" in Pascal or 
"return" in C-like languages.
It may be used without assignment:

{$IFDEF DEBUG}
x :=
{$ENDIF}
iif Obj = nil then 0 else Obj.DoSomethingAndReturnValue;

> I prefer
>     x := iif Obj = nil then 0 else Obj.Value;
> over
>     x := if Obj = nil then 0 else Obj.Value;
It's exactly that I suggest.
> 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.
Regards,
Serguei



More information about the fpc-pascal mailing list