お知らせ‎ > ‎

メソッド内GOTO

2009/03/24 1:14 に Kazuki Minamitani が投稿   [ 2009/03/24 1:50 に更新しました ]
本物のプログラマは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.

Comments