このドキュメントでは、Natural で提供される 2 つのプログラミングモードについて説明します。
注意:
アプリケーションの構造がより明確になるため、通常はストラクチャードモードを排他的に使用することをお勧めします。したがって、『プログラミングガイド』の説明と例は通常、ストラクチャードモードのみを参照します。
以下のトピックについて説明します。
Natural では次の 2 つのプログラミング方法が提供されます。
レポーティングモードが役に立つのは、複雑なデータやプログラミング構成を必要としない、アドホックレポートおよび小さなプログラムを作成する場合のみです。レポーティングモードでプログラムを作成すると、小さなプログラムが大きくなり、かつ複雑になりやすいので注意してください。
一部の Natural ステートメントはレポーティングモードでのみ使用できること、また、その他のステートメントはレポーティングモードで使用すると特別な構造になることに注意してください。レポーティングモードで使用可能なステートメントの概要については、『ステートメント』ドキュメントの「レポーティングモードのステートメント」を参照してください。
ストラクチャードモードは、明確で適切に定義されたプログラム構成で複雑なアプリケーションを実装するときに使用します。ストラクチャードモードの主な利点は、次のとおりです。
プログラムを構造化して記述する必要があるため、読みやすく、管理しやすくなります。
プログラムで使用するすべてのフィールドを、レポーティングモードでできるようなプログラム全体に散在させるのではなく、1 つの一元的な場所に定義する必要があるため、データの全体的な制御がはるかに容易になります。
ストラクチャードモードでは、実際のプログラムをコーディングする前に、より詳細な計画を立てる必要があります。このため、多くのプログラミングエラーや非効率な作業を回避できます。
ストラクチャードモードで使用可能なステートメントの概要については、『ステートメント』ドキュメントの「機能別ステートメント」を参照してください。
デフォルトのプログラミングモードは、Natural 管理者がプロファイルパラメータ SM で設定します。
設定されたモードは、システムコマンド GLOBALS とセッションパラメータ SM を使用して変更できます。
| モード | システムコマンド |
|---|---|
| Structured | GLOBALS SM=ON |
| レポーティング | GLOBALS SM=OFF |
Natural のプロファイルおよびセッションパラメータ SM の詳細については、『パラメータリファレンス』の「SM - ストラクチャードモードでのプログラミング」を参照してください。
プログラミングモードの変更方法の詳細については、『パラメータリファレンス』の「SM - ストラクチャードモードでのプログラミング」を参照してください。
レポーティングモードとストラクチャードモード間の機能上の主な違いは、次のとおりです。
注意:
これら 2 つのモード間の機能上の違いについては、『ステートメント』ドキュメントを参照してください。モードが区別されるステートメントごとに、個別の構文図と構文要素を説明しています。レポーティングモードで使用可能なステートメントの機能概要については、『ステートメント』ドキュメントの「レポーティングモードのステートメント」を参照してください。
| レポーティングモード: | (CLOSE)
LOOP および DO ...
DOEND ステートメントは、この目的のために使用されます。
|
|---|---|
| ストラクチャードモード: | すべてのループや論理構成は、対応する END-... ステートメントで明示的に閉じる必要があります。したがって、どのループまたは論理構成がどこで終わるかがすぐにわかります。
|
次の 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)は、データエリアにあらかじめ定義しておかなくても参照できます。

ストラクチャードモードでは、使用する各データベースフィールドを、「フィールド定義」および「データベースアクセス」で説明されているように、DEFINE DATA ステートメントに指定する必要があります。
