Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

[JavaScript] goto 文の実装例

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
6
Help us understand the problem. What are the problem?