On 02/02/2016 13:24, Sven Barth wrote:

> Look at the "iif" as an statement and the things will be simple.

BECAUSE. IT. IS. *NOT*. A. STATEMENT!
It never was and it never will be! It returns a value and thus by definition it is an expression!


+1
And imho that why it is important that it does not look like a statement either, i.e. it does not start with a keyword.

also if we are discussing (are we?) a form like
  x:= iIf a>b  iThen c iElse b;
then why not
  x:=  a>b  ifThen c ifElse b;

What are the advantages/disadvantages they have over each other?

They both need operator precedence:
  x :=  iIf a Then b else c + 3;
should be which
  x :=  (iIf a Then b else c) + 3;
  x :=   iIf a Then b else (c + 3);

unless a closing "end" is enforced
  x:= iIf a>b  iThen c iElse b iEnd;
Which is what the function stile does implicitly, by having brackets around all 3 arguments.

------------------
Btw, just for fun, did some playing to see how much could be done with current fpc

program Project1;
{$mode objfpc}
{$MACRO on}
{$define ifthen:=and}
{$define ifelse:=or}

type TIfThen = record
  b:boolean;
  v:integer;
end;
operator and (a:boolean;b:integer):TIfThen;
begin
  result.b := a;
  result.v := b;
end;
operator or (a:TIfThen;b:integer):integer;
begin
  if a.b then
    result := a.v
  else
    result := b;
end;

begin
  writeln( (1<2) and 3 or 4 );
  writeln( (1>2) and 3 or 4 );
  writeln( (1<2) ifthen 3 ifelse 4 );
  writeln( (1>2) ifthen 3 ifelse 4 );
  readln;
end.




_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to