様々なエディタが選択可能なことはご理解いただけたと思います。今後は有償、無償のものから各プロジェクトにあったツールを皆さんで選択して、開発の生産性の向上や、他のツールとの連携を実現していきましょう。イメージを掴んでいただくことが目的でした。今回からはいよいよプログラミングの詳細説明を行っていきます。〜知っておきたい12のこと〜」の第四回で「プログラムの構造」を解説しました。基本構造を解説します。前回の連載もぜひ参照ください。オブジェクトのことを指します。コマンドを使って実行しますが、この呼び出し方法を動的呼び出しといいます。コマンドが実行されるたびに指定したプログラムのアドレスを分析解決し、そのプログラムに制御を渡します。*SRVPGM(連載の後半で説明します)の二種類ですが、それぞれ二段階の手順を踏む必要があります。実行することはできません。オブジェクトが一つ以上必要です。コマンドを使うと便利です。今回の連載の実習でも多くはこのコマンドを使っています。コードを記述する上で必要なソースの構造について更に詳しく見ていきましょう。ソース・コードは、1つ以上のプロシージャーを必ず記述しなければなりません。プロシージャーは実行単位であり、大きく以下の二種類に分類できます。最低一つ存在しなければなりません。複数のモジュールを含むプログラムの場合、そのモジュールがそれぞれメイン・プロシージャーを持っていても構いません。どのモジュールのメイン・プロシージャーを呼び出すかは、プログラムの作成(CRTPGMコマンド)時に指定します。メイン・プロシージャーは更に以下の2種類に分類できます。言語が元々持っているサイクル論理を含みます。サイクル論理の恩恵を受けることができません。サイクル・メイン・プロシージャーはモジュール・レベル(最初のプロシージャー定義の前の部分)に記述します。サイクル論理を利用することは可能です。サイクル・メイン・プロシージャーを最大限有効に活用するためにはこの方法を検討してください。リニア・メイン・プロシージャーはサイクル論理を含みません。サイクル論理を使用できないので、メイン・プロシージャーとしてはこちらを選択することが基本になります。キーワードを思い出してください)。サブ・プロシージャーサブ・プロシージャーは静的呼び出しによって実行することができます。コマンドで呼び出すことはできません(メイン・プロシージャーではないため)。コマンド)実行時にアドレスの分析解決を済ましてしまう(この処理をバインドといいます)ため、動的呼び出しよりも速く実行することが可能です。静的呼び出しはプロシージャー間での呼び出しに使用され、実行が終了すると呼び出し元に戻ります。引数を受け取り結果を返すことが可能なので、ユーザー定義関数として利用することもできます。複数のプログラムで共通して使用する関数をまとめてオブジェクト化したものを、サービス・プログラム(*SRVPGM)といいます。文法解説それでは次に、基本的な文法事項を学習していきましょう。ソース・コードの一行目の一桁目に記述します。コンパイラーは2行目以降のソース・コードが完全自由形式で記述されていると認識してコンパイルを実行することになります。桁目から行末までの任意の桁に自由にステートメントを記述することができます。ない場合でも、以下の制約を守れば自由形式で記述することが可能です。桁目にコーディング桁位置制約がある状態でのコーディングは、様々なエディタを使用する上での足かせになることが多いはずです。先頭に記述し、2行目以降に制約のない状態でコーディングするようにしましょう。コメントについてソース・コード内に説明文として記述されたものをコメント(または注記)と言います。コメントはコンパイラーが無視するので、プログラムを作成および保守する人の有効な情報を自由に記述することができます。後にあるすべてのテキストはコメントとみなされます。は行の先頭で記述してもよいし、途中で記述しても構いません。先頭で記述した場合は、その行はすべてコメントとみなされ、コンパイラーが無視します。前の部分はコンパイラーが評価します。おけるコメントは単独行のみに有効です。言語のような複数行をコメントとする記述形式は無効なので注意しましょう。記述できるものは全てステートメントと呼びます。ステートメントは以下の五種類です。始まり、プログラムの生成と実行に関する情報を提供します。記述できるのはモジュール・レベルで、サブ・プロシージャー内には記述できません。続けてキーワードを記述します。一つの制御ステートメントに複数キーワードを記述してもよいし、複数行に分けても構いません。始まり、プロシージャー内で使用するデータベースを定義します。モジュール・レベルおよびサブ・プロシージャー・レベルの両方で記述可能です。ファイル記述ステートメントの詳細は、第6回で解説します。定義ステートメントは以下で始まります。DCL-SDCL-CDCL-DS、END-DSDCL-PI、END-PIDCL-PR、END-PRそれぞれ、変数、名前付き定数、データ構造、プロシージャー・インターフェースおよびプロトタイプ定義を記述するために使用します。モジュール・レベルとサブ・プロシージャー・レベルの両方で記述可能です。リニア・メイン・プロシージャーおよびサブ・プロシージャーを定義するために使用します。演算ステートメントは、プログラムのロジックを記述するために使用します。以上の演算ステートメントがあります。モジュール・レベルとサブ・プロシージャー・レベルの両方で記述することができます。全てのステートメントはセミコロン(;)で終わるという共通ルールがありますので注意してください。各ステートメントは以下の順序で記述しなければなりません。定義ステートメントをどこで記述したかにより、その有効範囲が決まります。有効範囲とはその値を参照できる範囲のことです。モジュールのどこからでも参照できる定義をグローバル定義、リニア・メインおよびサブ・プロシージャー内でのみ参照できる定義をローカル定義といいます。モジュール・レベルで定義ステートメントを記述すると、グローバル定義になります。リニア・メインおよびサブ・プロシージャー内で記述すると、ローカル変数となります。ローカル変数とグローバル変数で同じ名前が使われた場合、そのローカル変数を定義したプロシージャー内ではグローバル変数を参照することはできません。ローカル定義には自動記憶域が使用されます。この記憶域はプロシージャーが呼び出されている間だけ存在し、呼び出されるたびに初期化されます。グローバル定義には静的記憶域が使用されます。この記憶域はそれを含むプログラムが実行されている間存在している記憶域です。ローカル定義に静的記憶域を使用するようにすることも可能です。これにより、サブ・プロシージャーの呼び出しにまたがって情報を共有することができるようになります。データ・タイプそれでは、プログラム内で使用する変数の定義方法について解説します。ステートメントを使用します。代表的なデータ・タイプとそれを指定するキーワードは以下の通りです。進数および符号付き整数形式で表現すると以下のようになります。