メソッド内GOTO

投稿日: Mar 24, 2009 8:14:45 AM

本物のプログラマはGOTOの使用をためらいませんが、SmallTalkは無制限なGOTOを備えていません。

SmallTalkのGOTOには以下のような制限があります。

制限された環境に生きる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.