> On Jan 15, 2022, at 8:30 AM, Michael Van Canneyt via fpc-pascal 
> <fpc-pascal@lists.freepascal.org> wrote:
> 
>> I saw a new syntax in Swift which I thought was clever and fits a pattern
>> I've seen before.  Basically it's a case statement for class types which
>> lets you branch depending on which class type the class instance is at run
>> time.
> 
> I think Scala did it before Swift.

What did it look like? Seems like an obvious feature any OOP language should 
have.

Swift has a compound switch statement which does lots of things. It's a little 
messy but it accomplishes this well. For example here they have a "case is" and 
"case let _ as" which tests for class type or casts to a local variable using 
"as".

           switch object {
                case is Message:
                   break
                case let content as MessageContent:
                   break
                case let attachment as Attachment:
                   break
                default: break
              }

Problem for Pascal is how to handle the casting mess. C languages (and Delphi 
now I guess) can do inline variable declarations to avoid the casting. 

Come to think of it this a similar problem with for-loops where you want to 
loop over a collection of only certain types. For example:

for monster in monsters do
    if monster is TZenChan then
      TZenChan(monster).Dothis;

Swift does something similar as the switch which would look kind of like this:

for case monster as TZenChan in monsters do
      TZenChan(monster).Dothis;


That syntax is not so nice but I like they're trying to help us manage class 
introspection using existing language constructs.

Regards,
        Ryan Joseph

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

Reply via email to