COBOL言語で良いコードを書くために学ぶべき3つの事項|学習講座

COBOL(コボル)言語で良いコードを書くために学ぶべき事とは

勉強法-学習講座-学ぶべき3つの事項-イメージ

良いコードを書くメリット

良いコードとは何でしょう?それは、実際にそのプログラムを活用する人がメリットを感じる事ができるかどうかという事になるでしょう。まずは実際に良いコードを活用する人(自分、自分以外の人(例えばチームメンバー))のメリットを考え、良いコードとは何かを考えてみましょう。

(自分のメリット)

  • コードの知識(書き方)が深まり、プログラミングスピードが上がる。
  • コードの可読性が高まり、プログラムの品質が上がる。
  • プログラムの維持(改修)がしやすくなる。

このように良いコードとは、開発生産性の向上につながる「書き方」だったり、プログラムの品質向上につながるような「書き方」という事がわかると思います。

(自分以外の人のメリット)

  • プログラムの製造が安定する事で、開発工数・納期が把握しやすくなる。
  • コードを流用する事で、開発生産性・品質が上がる。
  • コードの調査がしやすいため、問い合わせ回答や問題解決のスピードが上がる。

このように良いコードとは、プログラムを活用する人を「サポート」し、実際にプログラミングする人やそれを管理する人の「信頼を得る」ものである事がわかると思います。

良いコードを書くために学ぶべき事

良いコードを書くメリットを理解いただけたところで、ここからは良いコードを書くために学ぶべき事を3点ご紹介します。

1.人のプログラムに触れる、真似する。

プログラムを覚えたての初心者の方は、とにかくいろんな人のプログラムを読んだり、真似したりを繰り返す事が上達の近道です。数多くのプログラムに触れる事で、コードの知識が深まり、自分のコードの見やすさや問題点に気付く事になります。特に以下のポイントを意識して参考にするといいでしょう。

・データ定義(変数名)の書き方

データ定義(変数名)は、自由に記述できる分、後から見返しても、わかりやすい名前になっているかがポイントです。良いコードを書く人は、ファイル入出力、条件判断、繰り返し処理、配列、DBアクセスなど、そのデータ定義が何を目的にして定義されているかが、ひと目でわかるような書き方になっています。

・頻繁に登場する処理の書き方

繰り返し処理、ファイルのシーケンスチェックやマッチング処理、DBアクセスなど、COBOL言語では、頻繁に登場する処理がいくつかあります。良いコードを書く人は、プログラムが変わっても、このように頻繁に使われる処理は同じように書くよう注意されています。

・コメントの書き方

意外と差がつくのがコメントです。特に他の人が利用する事を考えない人は、ほとんどコメントが書かれていません。コメントを記載していないと書いた本人でも、その内容がわからなくなる事があります。データ定義や複雑な処理の前に概要を記載するなど、良いコードを書く人は、常に他の人に見られる事を意識したコメントが記載されています。

2.プログラムパターンを考える。

プログラミング経験のある中級者以上の方は、より良いコードを書くためにプログラミングのパターンを考えるようにしてみましょう。このパターンを理解しておくと、実用的なプログラムを開発する時に、より生産性と品質の高いプログラムを作成する事ができるようになります。

ご参考までにCOBOL言語でよく利用されているプログラムパターンを上げておきます。こういうパターンごとのコードの書き方を覚えておくと、プログラミングの幅がグッと広がります。

プログラムパターン 概要
ファイルToファイル ・1つのファイルを読込み、レコード編集後、1つのファイルに出力。
ファイル分割 ・1つのファイルを読込み、レコード編集分割後、2つのファイルに出力。
ファイルマッチング ・マスターファイルとトランザクションファイルをマッチングし、照合データ、不照合データをファイルに出力。
DB検索(1件) ・検索キーにてDBを検索(SELECT INTO:1件)。
DB検索(複数件) ・検索キーにてDB検索(FETCH:複数件)。
DB新設 ・DBにレコードを追加。
DB更新 ・DBのレコードを更新。
DB削除 ・DBのレコードを削除。

3.プログラムパターンを考える。

プログラムパターンを学んだ方は、次にそのパターンをテンプレート化する事を学びましょう。テンプレートは誰でも使えるように記述する必要があるので、単にプログラムを書くよりも高度な作業になります。

以下、ご参考までに、ファイルToファイルのサンプルプログラムを掲載しておきます。

template1.cob

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. TEMPLATE1.
  3. ENVIRONMENT DIVISION.
  4. INPUT-OUTPUT SECTION.
  5. FILE-CONTROL.
  6. SELECT IN01-FILE
  7. ASSIGN TO "test_in.txt"
  8. ORGANIZATION IS LINE SEQUENTIAL.
  9. SELECT OUT01-FILE
  10. ASSIGN TO "test_out.txt"
  11. ORGANIZATION IS LINE SEQUENTIAL.
  12. *> -------------------------------------------
  13. *> データ部
  14. *> -------------------------------------------
  15. DATA DIVISION.
  16. FILE SECTION.
  17. *> ファイル定義(インプット)
  18. FD IN01-FILE.
  19. 01 IN01.
  20. 03 IN-KOUMOKU1 PIC X(05).
  21. *> ファイル定義(アウトプット)
  22. FD OUT01-FILE.
  23. 01 OUT01.
  24. 03 OUT-KOUMOKU1 PIC X(05).
  25. *> -------------------------------------------
  26. *> 作業場所節
  27. *> -------------------------------------------
  28. WORKING-STORAGE SECTION.
  29. *> スイッチ定義
  30. 01 SW-AREA.
  31. 03 SW-END PIC X(01).
  32. *> カウンタ定義
  33. 01 CNT-AREA.
  34. 03 CNT-IN01-CTR PIC 9(02).
  35. 03 CNT-OUT01-CTR PIC 9(02).
  36. *> 定数定義
  37. 01 CST-AREA.
  38. 03 CST-PGM-ID PIC X(09) VALUE 'TEMPLATE1'.
  39. 03 CST-1X PIC X(01) VALUE '1'.
  40. *> -------------------------------------------
  41. *> 手続き部
  42. *> -------------------------------------------
  43. PROCEDURE DIVISION.
  44. TEMPLATE1-RTN SECTION.
  45. *> 初期処理
  46. PERFORM INIT-RTN.
  47. *> 主処理
  48. PERFORM MAIN-RTN
  49. UNTIL SW-END = CST-1X.
  50. *> 終了処理
  51. PERFORM END-RTN.
  52. STOP RUN.
  53. TEMPLATE1-EXIT.
  54. *> -------------------------------------------
  55. *> 初期処理
  56. *> -------------------------------------------
  57. INIT-RTN SECTION.
  58. *> 入力ファイルOPEN
  59. OPEN INPUT IN01-FILE.
  60. *> 出力ファイルOPEN
  61. OPEN OUTPUT OUT01-FILE.
  62. *> プログラム名 表示
  63. DISPLAY CST-PGM-ID
  64. *> 入力ファイル読込処理
  65. PERFORM READ01-RTN.
  66. INIT-EXIT.
  67. *> -------------------------------------------
  68. *> 入力ファイル読込処理
  69. *> -------------------------------------------
  70. READ01-RTN SECTION.
  71. *> 入力ファイルREAD
  72. READ IN01-FILE AT END
  73. MOVE CST-1X TO SW-END
  74. GO TO READ01-EXIT
  75. END-READ.
  76. *> 処理件数カウントアップ
  77. ADD 1 TO CNT-IN01-CTR.
  78. READ01-EXIT.
  79. *> -------------------------------------------
  80. *> 主処理
  81. *> -------------------------------------------
  82. MAIN-RTN SECTION.
  83. *> 編集処理
  84. PERFORM EDIT01-RTN.
  85. *> 入力ファイルREAD処理
  86. PERFORM READ01-RTN.
  87. MAIN-EXIT.
  88. *> -------------------------------------------
  89. *> 編集処理
  90. *> -------------------------------------------
  91. EDIT01-RTN SECTION.
  92. *> 編集処理
  93. MOVE IN-KOUMOKU1 TO OUT-KOUMOKU1.
  94. *> ファイル出力処理
  95. PERFORM WRITE01-RTN.
  96. EDIT01-EXIT.
  97. *> -------------------------------------------
  98. *> ファイル出力処理
  99. *> -------------------------------------------
  100. WRITE01-RTN SECTION.
  101. *> 出力レコードWRITE
  102. WRITE OUT01.
  103. *> 処理件数カウントアップ
  104. ADD 1 TO CNT-OUT01-CTR.
  105. WRITE01-EXIT.
  106. *> -------------------------------------------
  107. *> 終了処理
  108. *> -------------------------------------------
  109. END-RTN SECTION.
  110. *> 入力ファイルCLOSE
  111. CLOSE IN01-FILE.
  112. *> 出力ファイルCLOSE
  113. CLOSE OUT01-FILE.
  114. *> 入力ファイル件数 表示
  115. DISPLAY "IN01 " CNT-IN01-CTR.
  116. *> 出力ファイル件数 表示
  117. DISPLAY "OUT01 " CNT-OUT01-CTR.
  118. END-EXIT.

実行結果

勉強法-学習講座-学ぶべき3つの事項-実行結果

入力ファイル

勉強法-学習講座-学ぶべき3つの事項-入力ファイル

出力ファイル

勉強法-学習講座-学ぶべき3つの事項-出力ファイル

このようにプログラムを処理単位に分け、さらにコメントを付ける事で、どこで何の処理をしているかが一目でわかると思います。また、初期処理、ファイル読込処理・出力処理、終了処理は、ファイルToファイル処理ではそのまま他のプログラムに流用できます。編集処理に注力すればいいので、開発生産性や品質が上がる事も理解いただける事でしょう。

まとめ

今回の学習講座では、良いコードを書くために学ぶべき3つの事項についてご紹介しました。良いコードは、シンプルでわかりやすいのが特徴です。通常のシステム開発はチームで仕事をする事になりますので、誰が見ても理解しやすいプログラムを作る事を心がけましょう。

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

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

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

COBOL入門のカテゴリー

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