【COBOL言語】「GO TO文」とは?使用頻度が減っている理由も解説します | 用語辞典

COBOL(コボル)言語の予約語GO TO文を使ったプログラムの流れの制御とは

辞典・辞書-GOTO-イメージ

COBOL(コボル)言語のGO TO文とは?

GO TO(英語)は、日本語に訳すると「~へ行く」という意味です。

COBOL(コボル)言語のGO TO文は、TOで示されるラベルにジャンプします。

GO TO文の形式

GO TO文は、TOのあとに書かれたラベルにジャンプします。

■書式

 GO TO ジャンプ先ラベル

■構文規則

 <ジャンプ先ラベル>

 処理をジャンプさせる先のラベル名を記述します。

■使用例

実際にGO TO文を使用したプログラム例をご紹介します。

辞典・辞書-GOTO-使用例

このプログラムは、コンソールに入力を促すメッセージを表示し、数字の0から9までの1文字を入力させる処理を繰り返すプログラムです。数字の9が入力されるとプログラムを終了します。

29行目のGO TO文で入力値のチェック処理にジャンプし、入力値のチェック処理では、入力値により、GO TO文での処理の戻り先が、「END-PROC」と「EXEC-DISPLAY-INPUT-PROC」の2カ所に分かれています。

■実行結果

はじめに入力を促すメッセージが表示されます。

辞典・辞書-GOTO-実行結果:

数字の0を入力してみます。

辞典・辞書-GOTO-入力例1

入力を促すメッセージが繰り返し表示されます。

次に数字の8を入力してみます。

辞典・辞書-GOTO-入力例2

入力を促すメッセージが繰り返し表示されます。

次に英字のAを入力してみます。

辞典・辞書-GOTO-入力例3

エラーメッセージが表示され、入力を促すメッセージが表示されます。

次に数字の9を入力してみます。

辞典・辞書-GOTO-入力例4

終了メッセージが表示され、プログラムが終了しました。

GO TO文のCOBOL(コボル)言語における基本事項やルールについて

GO TO文は処理を制御するための単純なジャンプ命令です。

処理をジャンプさせると、ジャンプ元のソースコードを見たときに、どこに処理が戻ってくるのか、またジャンプ先で処理がどこに行ってしまうのか理解しにくく、よく考えてジャンプさせないと、山盛りのスパゲティのように、処理の開始と終了がわからないソースコードになり、デバッグや改修が難しいプログラムになってしまいます。

このため、構造化プログラミングが主流となった現在のCOBOLプログラミングではGO TO文はほとんど使われず、サブルーチンを呼び出すPERFORM文や、別処理を呼び出すCALL文が使われています。

しかし、古いソースコードを読むと、まれにGO TO文が使われていることがありますので、参考として使い方を覚えておくといいでしょう。

COBOL(コボル)言語のGO TO文を使うときの注意点

現在の構造化されたCOBOLプログラミングでは、GO TO文を使うことがほとんどありませんが、どうしてもGO TO文を使う場合は、ジャンプ先から戻ってくるラベルを1カ所に統一するなど、処理の流れが明確にわかるようにしてください。

また、GO TO文を使う場合は、エラー処理などの例外処理などに限定しましょう。

GO TO文を使ったCOBOL(コボル)プログラムの活用方法

「COBOL(コボル)言語のGO TO文とは」でご紹介したサンプルプログラムは、ジャンプ先からの戻り先が複数あり、山盛りのスパゲティのように処理の開始と終了がわかりにくいソースコードでした。

しかし、大きくジャンプする箇所をエラー処理へのジャンプに限定し、繰り返し用のジャンプを1カ所に集約することによって、GO TO文を使っていても、比較的読みやすいソースコードにすることができます。

「COBOL(コボル)言語のGO TO文とは」のサンプルプログラムと同じ機能を、読みやすいソースコードにしたプログラムを、活用例としてご紹介します。

  1. ******************************************************************
  2. * Author:
  3. * Date:
  4. * Purpose:
  5. * Tectonics: cobc
  6. ******************************************************************
  7. IDENTIFICATION DIVISION.
  8. PROGRAM-ID. GOTO-SUMPLE2.
  9. DATA DIVISION.
  10. FILE SECTION.
  11. WORKING-STORAGE SECTION.
  12. 01 WORKING-AREA.
  13. *  コンソール入力バッファ
  14.   03 CONSOLE-INPUT PIC X(1).
  15.  
  16. PROCEDURE DIVISION.
  17. *-------------------------------------------
  18. * 主手続
  19. *-------------------------------------------
  20. MAIN-PROCEDURE.
  21. * コンソール入力エリアの初期化
  22.   MOVE SPACE TO CONSOLE-INPUT.
  23.  
  24. EXEC-DISPLAY-INPUT-PROC.
  25. * コンソール表示&入力
  26.   DISPLAY "数字を1文字入力してください".
  27.   DISPLAY "0-8:CONTINUE  9:EXIT".
  28.   ACCEPT CONSOLE-INPUT FROM CONSOLE.
  29.  
  30.   IF CONSOLE-INPUT = 9
  31.    GO TO END-PROC
  32.   ELSE IF (CONSOLE-INPUT <= 8) AND
  33.      (CONSOLE-INPUT >= 0) THEN
  34.     CONTINUE
  35.   ELSE
  36.    GO TO DISPLAY-ERROR-MSG-PROC
  37.   END-IF
  38.   END-IF.
  39. LOOP-LABEL.
  40.   GO TO EXEC-DISPLAY-INPUT-PROC.
  41.  
  42. END-PROC.
  43.  DISPLAY "プログラムを終了します"
  44.   STOP RUN.
  45.  
  46. *-------------------------------------------
  47. * エラーメッセージ表示処理
  48. *-------------------------------------------
  49. DISPLAY-ERROR-MSG-PROC.
  50.   DISPLAY "入力値が数字ではありません"
  51.   GO TO LOOP-LABEL.
  52.  
  53. END PROGRAM GOTO-SUMPLE2.

■実行結果

はじめに入力を促すメッセージが表示されます。

辞典・辞書-GOTO-実行結果

数字の0を入力してみます。

辞典・辞書-GOTO-入力例1

入力を促すメッセージが繰り返し表示されます。

次に数字の8を入力してみます。

辞典・辞書-GOTO-入力例2

入力を促すメッセージが繰り返し表示されます。

次に英字のAを入力してみます。

辞典・辞書-GOTO-入力例3

エラーメッセージが表示され、入力を促すメッセージが表示されます。

次に数字の9を入力してみます。

辞典・辞書-GOTO-入力例4

終了メッセージが表示され、プログラムが終了しました。

現代のCOBOL言語において、GO TO文は死語といっていいでしょう。

プログラムの改修する場合や、新規にプログラムを作る場合は、GO TO文を使用せず、PERFORM文やCALL文で必要な機能を実現できるように、きれいに構造化した設計をすることが大切です。

この記事を読んだ人は、こちらの記事も読んでいます

【未経験者歓迎】COBOLプログラマー・システムエンジニアの募集

株式会社COBOLの求人・転職・募集情報を見る

COBOL入門のカテゴリー

取引企業様 募集中
COBOL技術者 募集
COBOL魂
読者採用
COBOL入門