Как мы пишем, если еще если в pharo?

Я должен проверить 3 условия, используя ifif if elseif. Как я могу сделать это в фаро. Я сделал, но не уверен, так как я не нашел такого приложения в pharo.

x = 25
ifTrue:[DoSomething]
ifFalse:[DoSomething else].
        
x < 25
ifTrue: [DoSomething]
ifFalse:[Domething else].
         
x > 25
ifTrue: [DoSomething ]
ifFalse:[DoSomething else].

1 ответ

Решение

Вы можете выбрать другой дизайн (используя полиморфизм, поиск, ...), но это практически одинаково для любого языка ОО (в частности, для Smalltalk, обратитесь к этой Рефакторинг if-цепочек в Smalltalk без взрыва класса).

В Smalltalk (и нескольких других языках, таких как Ruby) у вас есть одна дополнительная опция - расширение класса. Вы можете создавать собственные операторы "если", которые хорошо соответствуют вашему конкретному домену и делают код более очевидным.

Например, в данном примере я мог бы добавить новый метод к Number класс называется compareTo:lesser:equal:greater:, а затем ваш код меняется на

x compareTo: 25
    lesser: [ do something ]
    equals: [ do something else ]
    greater: [ do something entirely different ]

Это, естественно, зависит от вашего конкретного домена, возможно, в другом случае формулировка будет другой. Например, в случае коллекций, есть col ifEmpty: [ ] ifNotEmpty: [ ]для ноля есть ifNil:ifNotNil:для обнаружения detect:ifFound:ifNone:, для словарей at:ifPresent:ifAbsent:, так далее.

Другие вопросы по тегам