このドキュメントでは、Natural で提供される 2 つのプログラミングモードについて説明します。 次のトピックについて説明します。
Natural では次の 2 つのプログラミング方法が提供されます。
注意:
アプリケーションの構造がより明確になるため、通常はストラクチャードモードを排他的に使用することをお勧めします。
レポーティングモードが役に立つのは、複雑なデータやプログラミング構成を必要としない、アドホックレポートおよび小さなプログラムを作成する場合のみです。 レポーティングモードでプログラムを作成すると、小さなプログラムが大きくなり、かつ複雑になりやすいので注意してください。
一部の Natural ステートメントはレポーティングモードでのみ使用できること、また、その他のステートメントはレポーティングモードで使用すると特別な構造になることに注意してください。 レポーティングモードで使用可能なステートメントの概要については、『ステートメント』ドキュメントの「レポーティングモードのステートメント」を参照してください。
ストラクチャードモードは、明確で適切に定義されたプログラム構成で複雑なアプリケーションを実装するときに使用します。 ストラクチャードモードの主な利点は、次のとおりです。
プログラムを構造化して記述する必要があるため、読みやすく、管理しやすくなります。
プログラムで使用するすべてのフィールドを、レポーティングモードでできるようなプログラム全体に散在させるのではなく、1 つの一元的な場所に定義する必要があるため、データの全体的な制御がはるかに容易になります。
ストラクチャードモードでは、実際のプログラムをコーディングする前に、より詳細な計画を立てる必要があります。このため、多くのプログラミングエラーや非効率な作業を回避できます。
ストラクチャードモードで使用可能なステートメントの概要については、『ステートメント』ドキュメントの「機能別ステートメント」を参照してください。
デフォルトのプログラミングモードは、Natural 管理者がプロファイルパラメータ SM
で設定します。 設定されたモードは、システムコマンド GLOBALS
とセッションパラメータ SM
を使用して変更できます。
ストラクチャードモード: | GLOBALS SM=ON |
---|---|
レポーティングモード: | GLOBALS SM=OFF |
Natural のプロファイルおよびセッションパラメータ SM
の詳細については、『パラメータリファレンス』の「SM - ストラクチャードモードでのプログラミング」を参照してください。
プログラミングモードの変更方法の詳細については、『パラメータリファレンス』の「SM - ストラクチャードモードでのプログラミング」を参照してください。
レポーティングモードとストラクチャードモード間の機能上の主な違いは、次のとおりです。
注意:
これら 2 つのモード間の機能上の違いの詳細については、『ステートメント』ドキュメントを参照してください。 モードが区別されるステートメントごとに、個別の構文図と構文要素を説明しています。 レポーティングモードで使用可能なステートメントの機能概要については、『ステートメント』ドキュメントの「レポーティングモードのステートメント」を参照してください。
レポーティングモード: |
この目的には、
|
---|---|
ストラクチャードモード: |
すべてのループや論理構成は、対応する |
次の 2 つの例は、処理ループと論理条件の構成における 2 つのモードの違いを示しています。
レポーティングモードの例では、DO
ステートメントおよび DOEND
ステートメントを使用して、AT END OF DATA
条件に基づくステートメントブロックの開始と終了を示しています。 END
ステートメントによって、アクティブな処理ループがすべて閉じます。
READ EMPLOYEES BY PERSONNEL-ID DISPLAY NAME BIRTH AT END OF DATA DO SKIP 2 WRITE / 'LAST SELECTED:' OLD(NAME) DOEND END
ストラクチャードモードの例では、END-ENDDATA
ステートメントを使用して AT END OF DATA
条件を閉じ、END-READ
ステートメントを使用して READ
ループを閉じています。 結果として、プログラムはさらに明確に構造化され、各構成がどこで開始し、どこで終了するかを即座に確認できます。
DEFINE DATA LOCAL 1 MYVIEW VIEW OF EMPLOYEES 2 PERSONNEL-ID 2 NAME 2 BIRTH END-DEFINE READ MYVIEW BY PERSONNEL-ID DISPLAY NAME BIRTH AT END OF DATA SKIP 2 WRITE / 'LAST SELECTED:' OLD(NAME) END-ENDDATA END-READ END
処理ループを閉じるには、END
、LOOP
(または CLOSE LOOP
)、および SORT
のいずれかのステートメントを使用できます。
LOOP
ステートメントを使用すると複数のループを閉じることができ、END
ステートメントを使用するとアクティブなすべてのループを閉じることができます。 1 つのステートメントで複数のループを閉じることができるのは、ストラクチャードモードと基本的に異なる点です。
SORT
ステートメントはすべての処理ループを閉じてから、別の処理ループを開始します。
FIND ... FIND ... ... ... LOOP /* closes inner FIND loop LOOP /* closes outer FIND loop ... ...
FIND ... FIND ... ... ... END /* closes all loops and ends processing
FIND ... FIND ... ... ... SORT ... /* closes all loops, initiates loop ... END /* closes SORT loop and ends processing
ストラクチャードモードでは、それぞれの処理ループに対してループを閉じるための特定のステートメントを使用します。 END
ステートメントで処理ループを閉じることはできません。 SORT
ステートメントの前に END-ALL
ステートメントを指定する必要があり、SORT
ループは END-SORT
ステートメントで閉じる必要があります。
FIND ... FIND ... ... ... END-FIND /* closes inner FIND loop END-FIND /* closes outer FIND loop ...
READ ... AT END OF DATA ... END-ENDDATA ... END-READ /* closes READ loop ... ... END
READ ... FIND ... ... ... END-ALL /* closes all loops SORT /* opens loop ... ... END-SORT /* closes SORT loop END
レポーティングモードでは、DEFINE DATA
ステートメントで定義する必要なくデータベースフィールドを使用することができるうえ、プログラムのどこにでもユーザー定義変数を定義できるので、ユーザー定義変数をプログラム全体に散在させることができます。
ストラクチャードモードでは、使用するすべてのデータ要素を 1 つの一元的な場所、つまりプログラムの先頭の DEFINE DATA
ステートメント またはプログラム外部のデータエリアに定義する必要があります。
レポーティングモードでは、データベースフィールドと DDM は、データエリアにあらかじめ定義しておかなくても参照できます。
ストラクチャードモードでは、使用する各データベースフィールドを、「フィールドの定義」および「Adabas データベースのデータへのアクセス」で説明されているように、DEFINE DATA
ステートメントに指定する必要があります。