なんか JavaScript で goto 文を実装した、みたいな記事を見かけたので、自分バージョンを書いてみた。
C言語の例は以下の通り。
c言語によるgoto文の例
printf("init\n");
start:
printf("start\n");
goto next;
skip:
printf("skip\n");
next:
printf("next\n");
printf("exit\n");
JavaScript言語で書いてみた。
JavaScript言語によるgoto文の様に書いてみた例
var target;
target: for (;;) switch (target) {
case undefined:
console.log('init');
case 'start':
console.log('start');
// goto next;
target = 'next';
continue target;
case 'skip':
console.log('skip');
case 'next':
console.log('next');
default:
break target;
}
console.log('exit');
変数は goto
文の行き先を示す target
という名前の変数1つだけ。
変数を宣言しただけだと初期値は undefined
だ。
後は continue target;
する前に行き先のラベルを文字列で格納するだけ。
target:
と continue target;
と break target;
の
target
部分はブロックラベルなので予約語以外ならなんでもいい。
変数名とラベル名は区別されているみたいですね。
for (;;)
は while (true)
や while (1)
でもOK。
でも for (;;)
は forever って読めるので無限ループっぽくて好きだ。
default: break target;
を間違えて default: break;
と
書いちゃうと、ループから抜けられなくて死ぬよ。
P.S.
書いてみたけど役に立つことはなさそう。