Smalltalk 如果elseif elseif在pharo,我们该如何书写?

Smalltalk 如果elseif elseif在pharo,我们该如何书写?,smalltalk,pharo,pharo-5,Smalltalk,Pharo,Pharo 5,我必须用if-elseif-elseif检查3个条件。我怎么能在法罗做到这一点。我有,但不确定,因为我没有发现任何这样的应用在法罗 x = 25 ifTrue:[DoSomething] ifFalse:[DoSomething else]. x < 25 ifTrue: [DoSomething] ifFalse:[Domething else]. x > 25 ifTrue: [DoSomething ] ifFalse:[DoSomething else]. x=25 i

我必须用if-elseif-elseif检查3个条件。我怎么能在法罗做到这一点。我有,但不确定,因为我没有发现任何这样的应用在法罗

x = 25
ifTrue:[DoSomething]
ifFalse:[DoSomething else].

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

x > 25
ifTrue: [DoSomething ]
ifFalse:[DoSomething else].
x=25
ifTrue:[做某事]
ifFalse:[做其他事情]。
x<25
ifTrue:[做某事]
ifFalse:[其他事情]。
x>25
ifTrue:[做某事]
ifFalse:[做其他事情]。

您可以选择不同的设计(使用多态性、查找等),但对于任何OO语言来说,这几乎是一样的(特别是对于Smalltalk,请参阅此)

在Smalltalk(以及Ruby等其他语言)中,您有一个额外的选项,那就是类扩展。您可以设计自己的“if”语句,使其与您的特定域很好地匹配,并使代码更加明显

例如,在您给定的示例中,我可以向名为
compareTo:lesser:equal:greater:
Number
类添加一个新方法,然后您的代码更改为

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

这自然取决于您的特定领域,可能在不同的情况下,措辞会有所不同。例如,对于集合,有
col ifEmpty:[]ifNotEmpty:[]
,对于nil有
ifNil:ifNotNil:
,对于检测
detect:iffind:ifNone:
,对于字典
at:ifPresent:ifAbsent:
,等等。

你可以天真地做一些类似
x<25 ifTrue:[…]ifFalse:[.x=25 ifTrue:[…]ifFalse:[.x>25如果真的:[…]ifFalse:[…]]]
。但是你可能想看看。如果你想把你的“做某事”看作行动(A1,A2,A3,…,A6),那么对于
x=25,你需要A1,A4,A6,对于
x<25,你需要A2,A3,A6,对于
x>25,你需要A2,A4,A5。不管使用哪种语言,我都会检查我的总体设计,看看是否有重构。否则,你所拥有的可能是最清晰的书写方式。如果行为本身是复杂的行为,那么为了清晰起见,这些行为可能需要自己的方法。就目前的情况来看,根据你目前所展示的,很难给出一个明确的答案。这似乎是我所需要的。谢谢@Peter