ラベル (プログラミング)
表示
プログラミング言語において、ラベル(英: label)とは特定の文を表すために付けられる識別子である。一般に、goto文によるジャンプ先や、switch文による分岐先といった、処理制御の移動先を指定する場合に用いられる。
概要
[編集]プログラムごとに利用できるラベルや付け方は異なる。
古典的BASICでは、行番号自体がラベルになっている。BASICではGOTO文やGOSUB文がラベルを使うが、GOTO文はサブルーチンを飛び越えた大域ジャンプも可能であるなど、スパゲティプログラムやバグの原因となりやすかった[1]。
後発のPascalやC言語といった構造化言語では、if文やfor文、サブルーチン呼び出しなどの「構造化」された制御構造によってgoto文をほとんど必要としなくなりラベルも行番号ではなくなったが残されている。
Javaにはgoto文は存在しないが、ラベル付きbreak文が用意されている。
C系言語のswitch文による多分岐では、比較対象となる値を持つcaseラベルと、それ以外に対応するdefaultラベルを文またはブロックに指定することができる[2]。
例
[編集]Pascalでの例:
procedure GotoExample;
label 666; { ラベルを宣言する }
begin
while ... do begin
...
if ... then goto 666; { while文からの脱出 }
...
end;
666:
WriteLn('End of procedure.') { これがラベルのついた文 }
end;
ISO標準Pascalにはreturn文に相当する構文がない。ただしモダンなObject Pascal処理系ではExit手続き[3]やBreak手続き[4]がサポートされるため、上記のようにラベルとgoto文を使う必要はない。
また、サブルーチンのエントリポイントを明示しない言語では、ラベルが事実上サブルーチンのエントリポイントを示すことがある。
古典的REXXでの例:
/* An Example */
...
IF ... THEN SIGNAL fatalError ELSE CALL whatTodo
...
whatTodo: /* ラベル */
ARG ...
...
RETURN
fatalError: /* ラベル */
SAY 'もう駄目。落ちます。'
EXIT