COBOL初心者が犯しやすいミスとその対策について | 学習講座
COBOL(コボル)言語を学び始めたばかりの人が犯しやすいミスとその対策
COBOL初心者が犯しやすいミスとは?
COBOLを学び始めたばかりの方に多いミス、陥りがちな失敗について学んでおくことはとても有効です。いくつかのミスを頭に入れておくだけで、COBOL学習がスムーズに進むようになります。
以下で、COBOL初心者が犯しやすいミスについて解説いたします。
コンパイルエラーとなるミス
COBOLは、コンパイルが必要なプログラミング言語です。
COBOLを学び始めたばかりの方が、まず最初に直面するのが、コンパイルエラーです。コンパイルエラーとなる、よくありがちなミスについて記載します。
1.スペルミス
初心者に多いミスの典型例が、スペルミスです。
COBOLは、変数等を「DATA DIVISION」に定義してから、処理部である「PROCEDURE DIVISION」で使用します。ここで、コンパイルエラーにありがちなのは、スペルミスにより「DATA DIVISION」に定義していない変数等が、「PROCEDURE DIVISION」に登場したためにエラーとなるケースです。
例)
DATA DIVISION
01 SUUJI1 PIC 9(5).
PROCEDURE DIVISION
MOVE 1 TO SUJI1. ←Uが一つ抜けています。
また、命令文を記載した際に、スペルミスにより、命令文が正しく認識されずにコンパイルエラーとなってしまうこともあります。
例)
正 SUBTRACT 誤 SUBRACT ←Tが抜けています。
このような文字が抜けたり、もしくは文字の順番が異なることでコンパイルエラーとなってしまいます。
◆対策
変数の文字の間違いを防ぐためには、コーディング完了後にテキストエディタの文字列検索機能を使って、変数自体を文字列検索する対策を行うと、変数の文字誤りを防ぐことができます。
命令文の文字誤りについては、命令文を記載する都度、スペルミスが無いか確認しながら記載するとミスが減るようになるでしょう。
2.異なる型の変数への設定
COBOLは、数字項目と文字項目などの定義を明確に区別しているプログラミング言語です。数字項目に対して、文字項目を設定することができません。
例)
DATA DIVISION
01 SUUJI1 PIC 9(5).
PROCEDURE DIVISION
MOVE ‘ABCDE’ TO SUUJI1. ←「SUUJI1」は、数字項目なので、文字列を設定することができません。
◆対策
変数を使用するときは、その変数の型が適切かどうか確認しながらコーディングするとミスが減るようになります。
また、変数名について、数字項目の場合は「SUUJI」、文字項目の場合は「MOJI」など、変数名を見ただけでその変数の型が分かるようにしておくこともミスを防ぐことにつながります。
3.コメント行の開始の記述ミス
COBOLでは、コメント行には先頭に「*」(アスタリスク)を記述する必要があります。この「*」が漏れてしまったために、コメント行であることを認識できず、コンパイルエラーとなります。
また、「*」の記述位置が誤っていた場合にも、コメント行として認識できないこととなりますので、コメント行を記載する際は「*」の位置に注意してください。
◆対策
コメント行の先頭に「*」をつけるクセをつけましょう。
また、他のコメント行からコピーして新しいコメント行を作ると、一度使われたコメント行なのでミスを減らすことにもつなげられます。
4.一連番号領域から記述してしまう
COBOLは、文字の記述位置が決まっている言語です。そのため、「一連番号領域」(文の先頭6桁)に文字を記載することはできません。文字を記載する開始位置に注意しましょう。
◆対策
テキストエディタによっては、桁位置が表示されるものがあるので、桁位置を表示しながらコーディングすると文字を記載する位置の誤りを減らすことができます。
5.ピリオドを忘れてしまう
COBOLでは、SECTIONの終わりには、必ずピリオドが必要です。ピリオドが無いと、SECTIONの終わりを認識できません。ピリオドを必ず入れるようにしましょう。
◆対策
コーディングをしたら、必ずSECTIONの終わりを見直して、ピリオドを忘れていないか確認するようにしましょう。SECTIONの終了名を統一する(SEC-ENDなど)と、テキストエディタの文字列検索機能を使用し、SECTIONの終了名とピリオを合わせて検索することで、ピリオド忘れが無いか確認しやすくなります。
6.END-IF、END-PERFORMの漏れ
IF文、PERFORM文などの処理を記述した際、終了を表すEND-IF、END-PERFORMを忘れてしまうことがあります。特に、条件をいろいろと組み合わせて階層を深くしていくと忘れがちになります。
例)
IF SUUJI1 > 2
THEN
IF SUUJI1 > 5
THEN
SUBTRACT 5 FROM SUUJI1
←END-IFが漏れてしまっています。
ELSE
ADD 1 TO SUUJI1
END-IF.
◆対策
テキストエディタの文字検索機能を使用して、IF文やPERFORM文などの条件文の数を検索してみましょう。IFとEND-IFの数があっているかどうかが、検索によって分かるはずです。そのような文字検索機能を使用することによって、END-IFやEND-PERFORM忘れを防ぐことができるようになります。
処理に関するミス
これまでは、コンパイルエラーに関するミスを記載しましたが、次は処理に関するミスについて記載します。
1.階層を深くしすぎる
処理条件を複雑にしたために、階層構造を深くしすぎることが多々あります。階層構造を深くしすぎてしまうと、処理が複雑になってしまうことにつながり、プログラムが見づらくなり、デバッグもしにくくなります。
◆対策
階層構造を深くしすぎることを防ぐためには、条件を一度に記載するのではなく、細かく分けることができないかどうか検討すると、階層を深くせずにプログラムを記載することができるようになります。
2.プログラムを長くしすぎる
一つのプログラムですべての処理を行おうとしてしまい、プログラムが長くなりすぎて、処理をおうことが難しくなってしまいます。一つのプログラムが長くなりすぎると、これもプログラムが見づらくなり、デバッグしにくくなります。
◆対策
一つのプログラムで全て処理しようとせず、複数のプログラムに分けることができないか検討してみるとよいでしょう。頻繁に使われるような処理は、サブルーチンを用いることで、プログラムを短くするだけでなく、プログラムの品質自体も向上させることができるようになります。
3.コメント文を適度に入れる
プログラムを作り始めたばかりだと、処理の記述ばかりに注力しがちで、あとから何の処理をしているかが分かりにくいプログラムを作りがちです。そのため、プログラムの途中にコメント文を適度に入れるようにしましょう。
◆対策
条件が長くなりそうだったり、複雑な条件が入りそうな場合は、その前にどんな処理をするのかコメント文を入れるようにしましょう。そうすることで、プログラムが見やすくなり、デバッグもしやすくなります。
COBOLプログラム作成例
「階層を深くしすぎる」に注意しながら、参考プログラムを作成してみましたので、ご紹介します。
以下のプログラム「SYOKI001」と「SYOKI002」は、いずれも同じ処理を行うプログラムです。
■プログラム「SYOKI001」
- IDENTIFICATION DIVISION.
- PROGRAM-ID. SYOKI001.
- DATA DIVISION.
- *
- WORKING-STORAGE SECTION.
- * データ定義
- 01 EIGO PIC X(3).
- 01 SUUGAKU PIC X(3).
- *
- 01 HYOUKA PIC X(1).
- *
- PROCEDURE DIVISION.
- *
- * 点数を入力
- *
- DISPLAY '数学の点数を入力してENTERを押してください'.
- *
- ACCEPT SUUGAKU.
- *
- DISPLAY '英語の点数を入力してENTERを押してください'.
- *
- ACCEPT EIGO.
- *
- * 点数を判定
- *
- EVALUATE SUUGAKU ALSO EIGO
- WHEN 0 THRU 50 ALSO ANY
- MOVE "D" TO HYOUKA
- WHEN 51 THRU 90 ALSO 0 THRU 50
- MOVE "C" TO HYOUKA
- WHEN 51 THRU 90 ALSO 51 THRU 100
- WHEN 91 THRU 100 ALSO 0 THRU 50
- MOVE "B" TO HYOUKA
- WHEN 91 THRU 100 ALSO 51 THRU 100
- MOVE "A" TO HYOUKA
- WHEN OTHER
- MOVE "Z" TO HYOUKA
- END-EVALUATE.
- *
- DISPLAY '評価は 'HYOUKA'です。'.
- *
- STOP RUN.
■プログラム「SYOKI002」
- IDENTIFICATION DIVISION.
- PROGRAM-ID. SYOKI002.
- DATA DIVISION.
- *
- WORKING-STORAGE SECTION.
- *データ定義
- 01 EIGO PIC X(3).
- 01 SUUGAKU PIC X(3).
- *
- 01 HYOUKA PIC X(1).
- *
- PROCEDURE DIVISION.
- *
- * 点数を入力
- *
- DISPLAY '数学の点数を入力してENTERを押してください'.
- *
- ACCEPT SUUGAKU.
- *
- DISPLAY '英語の点数を入力してENTERを押してください'.
- *
- ACCEPT EIGO.
- *
- * 点数を判定
- *
- IF (SUUGAKU >= 0) AND
- (SUUGAKU <= 50)
- THEN
- MOVE "D" TO HYOUKA
- ELSE
- IF (SUUGAKU >= 51) AND
- (SUUGAKU <= 90)
- THEN
- IF (EIGO >= 0) AND
- (EIGO <= 50)
- THEN
- MOVE "C" TO HYOUKA
- ELSE
- IF (EIGO >= 51) AND
- (EIGO <= 100)
- THEN
- MOVE "B" TO HYOUKA
- ELSE
- MOVE "Z" TO HYOUKA
- END-IF
- END-IF
- ELSE
- IF (SUUGAKU >= 91) AND
- (SUUGAKU <= 100)
- THEN
- IF (EIGO >= 0) AND
- (EIGO <= 50)
- THEN
- MOVE "B" TO HYOUKA
- ELSE
- IF (EIGO >= 51) AND
- (EIGO <= 100)
- THEN
- MOVE "A" TO HYOUKA
- ELSE
- MOVE "Z" TO HYOUKA
- END-IF
- END-IF
- ELSE
- MOVE "Z" TO HYOUKA
- END-IF
- END-IF
- END-IF.
- *
- DISPLAY '評価は 'HYOUKA'です。'.
- *
- STOP RUN.
同じ処理を行うプログラムですが、「SYOKI001」は、EVALUATE文により判定条件がすっきりしているのに対し、「SYOKI002」は、IF文のみで判定しているため階層構造が深くなってしまいプログラムが見づらくなってしまっています。
■「SYOKI001」の実行結果
■「SYOKI002」の実行結果
プログラムを分かりやすいものにするためには、「SYOKI001」のように判定方法をシンプルにして、出来るだけ階層を深くしすぎないようにしましょう。
この記事を読んだ人は、こちらの記事も読んでいます
あなたのCOBOL技術を活かしませんか?
COBOL入門のカテゴリー
1. 優良社員が多数在籍しています
2. 即日派遣、又は請負います
3. 安心価格で請負います
4. 同時、協力会社募集中です
1. 正社員
2. 契約社員
3. 個人事業主
などの 求人情報 が閲覧できます。
目指せ!COBOLダントツ一番企業。
創業当初の話や理念が閲覧できます。
COBOLとは、どのようなプログラミング言語なのか、初心者にもわかりやすく、文法の例をあげて解説してます。
COBOL入門の人気記事
- COBOL言語とは?プログラムの書き方やルールを解説!|基礎ガイド
- 【COBOL言語】条件分岐処理の代名詞「IF文」について知ろう|用語辞典
- COBOL言語の「MOVE文」とは?転記のルールをご紹介します|用語辞典
- COBOL言語の「STRING文」とは?文字連結の基礎知識と注意点|用語辞典
- 多枝分岐ってなに?COBOL言語の「EVALUATE文」を知ろう!|用語辞典
- COBOL言語の「PICTURE句」とは?基本事項を解説します!|用語辞典
- COBOL言語で計算処理をするなら「COMPUTE文」|用語辞典
- COBOL言語の「REDEFINES句」とは?使い方を確認しよう!|用語辞典
- 覚えておけば楽ができる?COBOL言語の「COPY文」の使い方|用語辞典
- COBOL言語の文字列操作のパターンを理解しよう!|基礎ガイド
- COBOL言語の初期化処理に重宝する「INITIALIZE文」とは?|用語辞典
- COBOL言語の「LOW-VALUE」の使い方について理解しよう!|基礎ガイド
- COBOL言語の「OCCURS句」について知ろう!学ぶべき基本とは|用語辞典
- COBOL言語初心者も安心! 難解「CALL文」をスッキリ解決|用語辞典
- COBOL言語の「PERFORM文」とは。実行制御について解説!|用語辞典
- COBOL言語の繰り返し処理のパターンを理解しよう!|基礎ガイド
- COBOL言語の「定数」の種類と使い方について理解しよう!|用語辞典
- COBOLのDBアクセスパターンを学ぼう!「FETCH」|応用ガイド
- COBOL言語の「DISPLAY文」は、ディスプレイ出力の為にある|用語辞典
- COBOL言語の「VARYING句」は便利?使用方法を学びましょう|用語辞典