您可以选择不同的设计(使用多态性、查找等),但这对于任何 OO 语言几乎都是相同的(特别是对于 Smalltalk,请参阅Refactoring if-chains in Smalltalk without class explode)。
在 Smalltalk(以及其他几种语言,例如 Ruby)中,您有一个额外的选择,那就是类扩展。您可以设计自己的“if”语句来匹配您的特定域并使代码更明显。
例如,在您给定的示例中,我可以向Number
名为 的类添加一个新方法compareTo:lesser:equal:greater:
,然后您的代码更改为
x compareTo: 25
lesser: [ do something ]
equals: [ do something else ]
greater: [ do something entirely different ]
这自然取决于您的特定域,也许在不同的情况下,措辞会有所不同。例如,对于集合, there's col ifEmpty: [ ] ifNotEmpty: [ ]
,对于 nil there's ifNil:ifNotNil:
,对于 detection detect:ifFound:ifNone:
,对于 dictionariesat:ifPresent:ifAbsent:
等。