Hi,
I just stumbled over the new Java feature "Pattern Matching for switch". https://openjdk.java.net/jeps/420
IMO it is a misnomer, but it has some interesting ideas.
Basically for Pascal it is a case block using the "is" operator. Pseudo code:
procedure Fly(o: TObject);
begin
case o is
TButton: TButton(o).foo;
TControl: TControl(o).bar;
TComponent: TComponent(o).meh;
nil: Msg;
else Run;
end;
end;The gain versus "if o is then..." is that the compiler warns if the case statements are not sorted and can optimize the checks.
For example the above code could be converted to:
procedure Fly(o: TObject);
var
tmp: TClass;
begin
if onil then
begin
tmp:=o.ClassType;
repeat
if tmp=TButton then
begin
TButton(o).foo;
break;
end else if tmp=TControl then
begin
TControl(o).bar;
break;
end else if tmp=TComponent then
begin
TComponent(o).meh;
break;
end;
tmp:=tmp.ClassParent;
if tmp=nil then
begin
Run;
break;
end;
until false;
end else
Msg;
end;What do you think?
Mattias
