Короткий базар
От: Кодт Россия  
Дата: 14.11.09 22:49
Оценка: 23 (2) :)))
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 позволяет снабжать метками каждый аргумент, что заметно повышает читаемость кода и снижает вероятность передачи неправильного параметра."
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.