Вова Патрышев рекламирует Скалу - за паттерн-матчинг:
Вот
тут:
В Скале же, на самом деле, не особ9о стесняются расписывать по классам, но на то есть другая причина: unapply, а ещё лучше сказать, линза (обратная сторона); с помощью её можно устраивать сравнение по образцу и, в зависимости от типа, выполнять какие-то действия с параметрами конструктора.
message match {
case CancelMessage(timeout: TimeInSeconds) => app.cancelato(timeout)
case EncourageMessage(text: String) => galera.listen(text); galera.trabalha
...
}
Тогда как в 45-летней давности в первом в истории ОО-языке это писалось так:
Current :- First;
While Current ne None do begin
Inspect Current
When A do Show ! Show of A;
When B do Show ! Show of B;
When C do Show ! Show of C;
Otherwise OutText("Not a (sub)class of A");
OutImage;
Current :- Current.Link
End While;