バージョン 6.3.3
 —  プログラミングガイド  —

Natural プログラミングモード

このドキュメントでは、Natural で提供される 2 つのプログラミングモードについて説明します。 次のトピックについて説明します。


プログラミングモードの目的

Natural では次の 2 つのプログラミング方法が提供されます。

注意:
アプリケーションの構造がより明確になるため、通常はストラクチャードモードを排他的に使用することをお勧めします。

レポーティングモード

レポーティングモードが役に立つのは、複雑なデータやプログラミング構成を必要としない、アドホックレポートおよび小さなプログラムを作成する場合のみです。 レポーティングモードでプログラムを作成すると、小さなプログラムが大きくなり、かつ複雑になりやすいので注意してください。

一部の Natural ステートメントはレポーティングモードでのみ使用できること、また、その他のステートメントはレポーティングモードで使用すると特別な構造になることに注意してください。 レポーティングモードで使用可能なステートメントの概要については、『ステートメント』ドキュメントの「レポーティングモードのステートメント」を参照してください。

ストラクチャードモード

ストラクチャードモードは、明確で適切に定義されたプログラム構成で複雑なアプリケーションを実装するときに使用します。 ストラクチャードモードの主な利点は、次のとおりです。

ストラクチャードモードでは、実際のプログラムをコーディングする前に、より詳細な計画を立てる必要があります。このため、多くのプログラミングエラーや非効率な作業を回避できます。

ストラクチャードモードで使用可能なステートメントの概要については、『ステートメント』ドキュメントの「機能別ステートメント」を参照してください。

Top of page

プログラミングモードの設定と変更

デフォルトのプログラミングモードは、Natural 管理者がプロファイルパラメータ SM で設定します。 設定されたモードは、システムコマンド GLOBALS とセッションパラメータ SM を使用して変更できます。

ストラクチャードモード: GLOBALS SM=ON
レポーティングモード: GLOBALS SM=OFF

Natural のプロファイルおよびセッションパラメータ SM の詳細については、『パラメータリファレンス』の「SM - ストラクチャードモードでのプログラミング」を参照してください。

プログラミングモードの変更方法の詳細については、『パラメータリファレンス』の「SM - ストラクチャードモードでのプログラミング」を参照してください。

Top of page

機能上の違い

レポーティングモードとストラクチャードモード間の機能上の主な違いは、次のとおりです。

注意:
これら 2 つのモード間の機能上の違いの詳細については、『ステートメント』ドキュメントを参照してください。 モードが区別されるステートメントごとに、個別の構文図と構文要素を説明しています。 レポーティングモードで使用可能なステートメントの機能概要については、『ステートメント』ドキュメントの「レポーティングモードのステートメント」を参照してください。

ループおよび機能ブロックを閉じるための構文

レポーティングモード:

この目的には、(CLOSE) LOOP ステートメントと DO ... DOEND ステートメントを使用できます。

END-DEFINEEND-DECIDE、および END-SUBROUTINE 以外の END-... ステートメントは使用できません。

ストラクチャードモード:

すべてのループや論理構成は、対応する END-... ステートメントで明示的に閉じる必要があります。 したがって、どのループまたは論理構成がどこで終わるかがすぐにわかります。

LOOP ステートメントおよび DO/DOEND ステートメントは使用できません。

次の 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

レポーティングモードで処理ループを閉じる

処理ループを閉じるには、ENDLOOP(または CLOSE LOOP)、および SORT のいずれかのステートメントを使用できます。

LOOP ステートメントを使用すると複数のループを閉じることができ、END ステートメントを使用するとアクティブなすべてのループを閉じることができます。 1 つのステートメントで複数のループを閉じることができるのは、ストラクチャードモードと基本的に異なる点です。

SORT ステートメントはすべての処理ループを閉じてから、別の処理ループを開始します。

例 1 - LOOP:

FIND ... 
   FIND ... 
   ... 
   ... 
   LOOP      /* closes inner FIND loop 
LOOP         /* closes outer FIND loop 
... 
...

例 2 - END:

FIND ... 
   FIND ... 
   ... 
   ... 
END             /* closes all loops and ends processing

例 3 - SORT:

FIND ... 
   FIND ... 
   ... 
   ... 
SORT ...        /* closes all loops, initiates loop 
... 
END             /* closes SORT loop and ends processing

ストラクチャードモードで処理ループを閉じる

ストラクチャードモードでは、それぞれの処理ループに対してループを閉じるための特定のステートメントを使用します。 END ステートメントで処理ループを閉じることはできません。 SORT ステートメントの前に END-ALL ステートメントを指定する必要があり、SORT ループは END-SORT ステートメントで閉じる必要があります。

例 1 - FIND:

FIND ... 
   FIND ... 
   ... 
   ... 
   END-FIND       /* closes inner FIND loop 
END-FIND          /* closes outer FIND loop 
...

例 2 - READ:

READ ... 
   AT END OF DATA 
   ... 
   END-ENDDATA 
   ... 
END-READ           /* closes READ loop 
... 
... 
END

例 3 - SORT:

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 ステートメントに指定する必要があります。

Top of page