メソッド内GOTO
投稿日: Mar 24, 2009 8:14:45 AM
本物のプログラマはGOTOの使用をためらいませんが、SmallTalkは無制限なGOTOを備えていません。
SmallTalkのGOTOには以下のような制限があります。
同一メソッド内のLABELへのみジャンプすることができる
内側のスコープのLABELへはジャンプすることができない
制限された環境に生きるSmallTalkerは、本物のプログラマにはなりきれないのかもしれません。
SmallTalkGotoExample>>exampleFibonacci
"フィボナッチ数を求める"
| n fibArray i |
n := 50.
fibArray := Array new: n.
fibArray at: 1 put: 0.
fibArray at: 2 put: 1.
i := 3.
self LABEL: #LoopHead.
fibArray at: i put: (fibArray at: i - 1) + (fibArray at: i - 2).
i := i + 1.
(i <= n) ifTrue: [self GOTO: #LoopHead].
Transcript cr; show: fibArray printString.