On Tue, 2 Feb 2016, Serguei TARASSOV wrote:

On 02/02/2016 10:54, fpc-pascal-requ...@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.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to