SmallTalk — скуп на слова как де Ниро, с ним спорит только больной...
Взглянем, например, на методы класса Boolean
and: alternativeBlock
self subclassResponsibility
and: block1 and: block2
self ifFalse: [^ false].
block1 value ifFalse: [^ false].
block2 value ifFalse: [^ false].
^ true
and: block1 and: block2 and: block3
self ifFalse: [^ false].
block1 value ifFalse: [^ false].
block2 value ifFalse: [^ false].
block3 value ifFalse: [^ false].
^ true
and: block1 and: block2 and: block3 and: block4
self ifFalse: [^ false].
block1 value ifFalse: [^ false].
block2 value ifFalse: [^ false].
block3 value ifFalse: [^ false].
block4 value ifFalse: [^ false].
^ true
На 4-арном and (и то же самое для or!) действие наркотика контрол-вэ у авторов иссякло, и они всосали следующую дорожку
ifTrue: alternativeBlock
self subclassResponsibility
ifFalse: alternativeBlock
self subclassResponsibility
fTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock
self subclassResponsibility
ifFalse: falseAlternativeBlock ifTrue: trueAlternativeBlock
"Same as ifTrue:ifFalse:."
self subclassResponsibility
Не забываем, что булевы константы True и False — это субклассы, конкретизирующие поведение вышеупомянутых методов... Поэтому авторы сбегали к цыганам (точнее, к их суперклассу — к индусам) за новой порцией.
Вот такой лаокооничный синтаксис
(Если что — тырил эту прекрасность из реализации Pharo, которая является ответвлением Squeak. Возможно, у IBM Visualage сделано изящнее).
P.S. Возопиил в связи с тем, что "Язык
Objective-C позволяет снабжать метками каждый аргумент, что заметно повышает читаемость кода и снижает вероятность передачи неправильного параметра."