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

Michael Van Canneyt michael at freepascal.org
Tue Feb 2 11:28:19 CET 2016



On Tue, 2 Feb 2016, Serguei TARASSOV wrote:

> 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 doubt this is what Sven implemented/will implement. 
The assignment will always be needed.
But Sven will have to comment on that.

>
>> 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.

I know.

Michael.



More information about the fpc-pascal mailing list