11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[JavaScript] goto 文の実装例

Last updated at Posted at 2015-03-08

なんか JavaScript で goto 文を実装した、みたいな記事を見かけたので、自分バージョンを書いてみた。

goto文.jpg

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.
書いてみたけど役に立つことはなさそう。

11
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?