変数

4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次

version 11 (Modified)


4Dのデータは、基本的に全く異なる2つの方法で保持されます。フィールドはディスクに永続的にデータを保存するのに対し、変数はメモリ上に一時的にデータを格納します。

データベースを作成する際、フィールドに名前とデータタイプを指定するのと同様に、変数にも名前とデータタイプを指定します。

以下の変数タイプは、各データタイプと一致します:

・文字列(*)またはテキスト: 2GBまでの文字列

・整数: 整数値 -32768 ~ 32767

・倍長整数: 整数値 -2^31 ~ (2^31)-1

・実数: ±1.7e±308 (15桁) までの数値

・日付: 1/1/100 ~ 12/31/32767

・時間: 00:00:00 ~ 596000:00:00 (24:00までの秒数)

・ブール: True または False

・ピクチャ: 任意のWindowsまたはMacintosh ピクチャ

・BLOB (Binary Large OBject): サイズが2GBまでのバイト列

・ポインタ: ファイル、フィールド、変数、配列、配列要素のポインタ

(*) Unicodeモードでは、文字列とテキストタイプの変数は同じものです。非Unicodeモード (互換モード) では、文字列は255文字までの固定長文字列です。

(ポインタやBLOBを除く) 変数を画面上に表示したり、その中に入力したり、レポートに印刷したりできます。このように、入力可や入力不可のエリア変数はフィールドと同様に振舞います。そしてそれらを作成する際には、フィールドと同じ、組み込みのコントロールを使用できます:

・表示フォーマット

・入力フィルタやデフォルト値などのデータ検証

・文字フィルタ

・選択リスト (階層リスト)

・入力可または入力不可値

また、変数は以下のようなこともできます:

・ボタン (ボタン、チェックボックス、ラジオボタン、3Dボタン等) のコントロール

・スライダ (メータ、ルーラ、ダイアル) のコントロール

・スクロールエリア、ポップアップメニュー、ドロップダウンリストのコントロール

・階層リストや階層ポップアップメニューのコントロール

・ボタングリッド、タブコントロール、ピクチャボタンなどのコントロール

・保存する必要のない計算結果の表示

変数の作成


変数は、使用することで作成できます。フィールドで行うように、正式にそれらを定義することは必須ではありません。例えば、今日の日付に30日を加えた日付を保持する変数が必要な場合、以下のように書くことができます:

   MyDate:=Current date+30

4DはMyDateを作成し、必要な日付を保持します。コード行は“MyDateに、今日の日付に30日加えたものが代入される”と読むことができます。この後、データベースの必要な個所でMyDateを使用できます。例えば、日付変数を同じタイプのフィールドに格納する場合:

   [MyTable]MyField:=MyDate

しかしながら、通常、変数を明示的に特定のタイプに定義することをお勧めします。コンパイルしようとするデータベースで、変数のタイプを定義する方法については、コンパイラコマンドの節を参照してください。

変数にデータを代入する


変数にデータを格納、または変数からデータをコピーすることができます。変数にデータを置くことを、変数にデータを代入すると呼び、それを行うには代入演算子 (:=) を使用します。代入演算子はフィールドに対してデータを代入する場合にも使用します。

代入演算子は、変数を作成し、変数にデータを代入するために使用します。作成する変数名を代入演算子の左側に書きます。例えば:

   MyNumber:=3

は変数MyNumberを作成し、数値 3を置いています。MyNumberが既に存在すれば、単に数値 3が置かれます。

もちろん、変数からデータを取り出すことができなければ、便利とは言えません。再度代入演算子を使用します。[Products]SizeというフィールドにMyNumber変数の値を代入するには、代入演算子の右側にMyNumberを記述します:

   [Products]Size:=MyNumber

この[Products]Size の値は3になります。この例はとても単純ですが、データをある場所から別の場所へ転送する基本的な方法です。

重要: 代入演算子 (:=) と比較演算子 (=) とを混同しないように注意してください。代入演算子と比較演算子はまったく異なる演算子です。比較演算子に関する詳細は、演算子の節を参照してください。

ローカル、プロセス、およびインタープロセス変数


開発者はローカル変数、プロセス変数、およびインタープロセス変数の3種類の変数を作成できます。この3種類の変数の違いは、使用できるスコープにあります。また、それらを使用することのできるオブジェクトも異なります。

ローカル変数

ローカル変数はその名のとおりメソッド内でローカルであり、変数が作成されたメソッド内でのみアクセスすることができ、その他のメソッドからはアクセスできません。メソッド内でローカルであるというのは、「そのスコープがローカルである」という意味です。ローカル変数は、その使用範囲をメソッド内に限定する場合に用います。

ローカル変数は、以下のような目的のために使用されます:

・他の変数名との重複を避ける。

・データを一時的に使用する。

・プロセス変数の数を減らす。

ローカル変数の名前は必ずドル記号 ($) で始め、この記号を除く31バイトまでの文字を指定できます。これより長い名前を指定すると、4Dは余分の32バイト以降を切り捨てます。

多くのメソッドや変数を持つデータベースで作業する場合、現在作業しているメソッド内でのみ使用可能な変数を必要とする場合がよくあります。この場合、同じ変数名が他で使用していないかどうかを気にすることなくローカル変数を作成することができます。

しばしばデータベースで、ユーザからの小さなデータを必要とする場合があります。Request関数は、ユーザから1つのデータを取得します。Request関数はデータの入力を求めるダイアログボックスを表示し、ユーザがデータを入力した時点で、その入力情報を返します。通常このデータはメソッド内で長期間必要となることはありません。これは、ローカル変数を使用する良い例です。

   $vsID:=Request("Please enter your ID:")
   If (OK=1)
      QUERY ([People];[People]ID =$vsID)
   End if

このメソッドは、ユーザに従業員IDを入力するように要求します。ローカル変数$vsIDにレスポンスが代入され、ユーザが入力したIDに基づき検索が行われます。このメソッドが終了した時点で、$vsIDローカル変数はメモリから消去されます。この変数は1回のみ、またこのメソッド内でのみしか必要としないためローカル変数で十分です。

プロセス変数

プロセス変数は、プロセス内でだけ使用可能です。この変数はプロセスメソッドと、そのプロセス内で呼び出された他のメソッドで使用することができます。

プロセス変数には名前の前に付ける接頭辞がありません。プロセス変数名の長さは、最大31バイトまで指定できます。

インタプリタモードでは、変数は動的にメモリ上に作成、消去されます。これに対してコンパイルモードでは、作成したすべてのプロセス (ユーザプロセス) で同じプロセス変数定義が共有されますが、変数のインスタンスはプロセス毎に異なるものとなります。例えばプロセス変数myVarは、プロセスP_1とプロセスP_2の両方に存在しますが、それぞれ異なるインスタンスとなります。

バージョン6より、GET PROCESS VARIABLESET PROCESS VARIABLEを使用して、あるプロセスから他のプロセスのプロセス変数の値を取り出したり、設定したりできるようになりました。これらのコマンドの利用は、以下のような状況に限定することが、良いプログラミングの作法です:

・特定の個所あるいはコードにおけるプロセス間通信

・プロセス間のドラッグ&ドロップ処理

・クライアント/サーバにおいて、クライアントマシンプロセスとサバマシン上のストアドプロシージャプロセス間通信

詳細な説明は、プロセスの節と、これらのコマンドの説明を参照してください。

インタープロセス変数

インタープロセス変数はデータベース全体で使用することができ、すべてのプロセスで共有されます。主としてプロセスの間で情報を共有するために使われます。

インタープロセス変数の名前は、必ずインタープロセス記号(<>)で始めます。記号の後に31バイトまでの名前を指定できます。

: このシンタックスはWindowsとMacintosh両方で使用できます。

クライアント/サーバでは、各マシン(クライアントマシンとサーバマシン)で同じインタープロセス変数定義を共有しますが、マシンごとに各変数のインスタンスが存在します。

フォームオブジェクト変数


フォームエディタで、ボタン、ラジオボタン、チェックボックス、スクロールエリア、サーモメータ等のアクティブオブジェクトに変数名を与えると、同じ名前の変数が自動的に生成されます。例えば、MyButtonという名前のボタンを作成すると、MyButtonという名前の変数が作成されます。この変数名はボタンのラベルではなく、ボタンの名前であることに注意してください。

フォームオブジェクト変数を使用して、オブジェクトの制御やモニタを実行できます。例えば、このボタンがクリックされると、その変数に1が設定されます。それ以外の場合はすべて0になります。サーモメータやダイアルに関連付けられた変数では、現在の値を読んだり、あるいは値を変更することができます。例えばサーモメータをドラッグすると、変数の値は新しい設定値に変更されます。同様にメソッドで変数の値を変更すると、サーモメータは新しい値を表現するために再描画されます。

フォームと変数のより詳しい情報は、4D Design Referenceマニュアルのフォームイベントの節を参照してください。

システム変数


4Dは、システム変数と呼ばれる多くの変数を保守します。これらの変数を使用して、多くの処理をモニタすることができます。すべてのシステム変数がプロセス変数であり、プロセスの中でのみアクセスできます。

最も重要なシステム変数はOKシステム変数です。名前が示すように、特定のプロセスで、何かの事象がOKかどうかを通知します。例えば、レコードは保存されたか、重要な処理が終了したか、ユーザがOKボタンをクリックしたか等を判断できます。システム変数OKは、処理が正常に完了した場合1が設定され、そうでない場合0が設定されます。

システム変数に関する詳細は、システム変数の節を参照してください。

参照

データタイプ, ポインタ, メソッド, 演算子, 識別子, 制御フロー, 定数, 配列.


4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次