Jua*_*rre 6 refactoring if-statement smalltalk
由于Smalltalk不鼓励使用caseOf:,在没有类爆炸的情况下实现以下情况有哪些备选方案?
self condition1
ifTrue: [ self actionForCondition1 ]
ifFalse: [
self condition2
ifTrue: [ self actionForCondition2 ]
ifFalse: [
self condition3
ifTrue: [ self actionForCondition3 ]
ifFalse: [ .... ] ] ]
Run Code Online (Sandbox Code Playgroud)
取决于你的条件究竟如何?
如果你的条件是型式试验
anObject isKindOf: aClass
Run Code Online (Sandbox Code Playgroud)
您可以在类上调度,这意味着您可以调用操作方法anObject.
如果你的条件是平等测试
anObject = anotherObject
Run Code Online (Sandbox Code Playgroud)
您可以使用包含对象作为键的字典,将操作用作块闭包.
作为最后一个重新开始,如果没有其他帮助,您可能需要重写建议的代码以避免不必要的嵌套:
self condition1
ifTrue: [ ^ self actionForCondition1 ].
self condition2
ifTrue: [ ^ self actionForCondition2 ].
self condition3
ifTrue: [ ^ self actionForCondition3 ].
...
Run Code Online (Sandbox Code Playgroud)小智 5
如果您滚动到接近结尾
http://www.desk.org:8080/CampSmalltalk/control%20flow
你会发现这句话
“在 Smalltalk 中有四种方法可以表达 case-statement。”
其次是示例链接。
文本位于稍长的一系列页面的中间,为了说明的目的,偶尔会提到假设的导师和 Smalltalk 课程中的学生;为了您的问题,您可以忽略它)