4D v14.3変数 |
||
|
4D v14.3
変数
変数
4Dのデータは、基本的に全く異なる2つの方法で保持されます。フィールドはディスクに永続的にデータを保存するのに対し、変数はメモリ上に一時的にデータを格納します。 データベースを作成する際、フィールドに名前とデータタイプを指定するのと同様に、変数にも名前とデータタイプを指定します。 以下の変数タイプは、各データタイプと一致します:
(*) Unicodeモードでは、文字列とテキストタイプの変数は同じものです。非Unicodeモード (互換モード) では、文字列は255文字までの固定長文字列です。 (ポインタやBLOBを除く) 変数を画面上に表示したり、その中に入力したり、レポートに印刷したりできます。このように、入力可や入力不可のエリア変数はフィールドと同様に振舞います。そしてそれらを作成する際には、フィールドと同じ、組み込みのコントロールを使用できます:
また、変数は以下のようなこともできます:
変数は、使用することで作成できます。フィールドで行うように、正式にそれらを定義することは必須ではありません。例えば、今日の日付に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:") プロセス変数は、プロセス内でだけ使用可能です。この変数はプロセスメソッドと、そのプロセス内で呼び出された他のメソッドで使用することができます。 プロセス変数には名前の前に付ける接頭辞がありません。プロセス変数名の長さは、最大31文字まで指定できます。 インタプリタモードでは、変数は動的にメモリ上に作成、消去されます。これに対してコンパイルモードでは、作成したすべてのプロセス (ユーザプロセス) で同じプロセス変数定義が共有されますが、変数のインスタンスはプロセス毎に異なるものとなります。例えばプロセス変数myVarは、プロセスP_1とプロセスP_2の両方に存在しますが、それぞれ異なるインスタンスとなります。 バージョン6より、GET PROCESS VARIABLEやSET PROCESS VARIABLEを使用して、あるプロセスから他のプロセスのプロセス変数の値を取り出したり、設定したりできるようになりました。これらのコマンドの利用は、以下のような状況に限定することが、良いプログラミングの作法です:
インタープロセス変数はデータベース全体で使用することができ、すべてのプロセスで共有されます。主としてプロセスの間で情報を共有するために使われます。 インタープロセス変数の名前は、必ずインタープロセス記号(<>)で始めます。記号の後に31バイトまでの名前を指定できます。 注: このシンタックスはWindowsとMacintosh両方で使用できます。 クライアント/サーバでは、各マシン(クライアントマシンとサーバマシン)で同じインタープロセス変数定義を共有しますが、マシンごとに各変数のインスタンスが存在します。 フォームエディタで、ボタン、ラジオボタン、チェックボックス、スクロールエリア、サーモメータ等のアクティブオブジェクトに変数名を与えると、同じ名前の変数が自動的に生成されます。例えば、MyButtonという名前のボタンを作成すると、MyButtonという名前の変数が作成されます。この変数名はボタンのラベルではなく、ボタンの名前であることに注意してください。 フォームオブジェクト変数を使用して、オブジェクトの制御やモニタを実行できます。例えば、このボタンがクリックされると、その変数に1が設定され ます。それ以外の場合はすべて0になります。サーモメータやダイアルに関連付けられた変数では、現在の値を読んだり、あるいは値を変更することができま す。例えばサーモメータをドラッグすると、変数の値は新しい設定値に変更されます。同様にメソッドで変数の値を変更すると、サーモメータは新しい値を表現 するために再描画されます。 (ボタンや入力可能変数、チェックボックス等の) フォームオブジェクトに割り当てる変数を、必要に応じて4Dに動的に作成させることができます。これを行うには、プロパティリストの"変数名"フィールドを空にします: 変数名が与えられていないと、フォームがロードされたとき、4Dはインタープリターのプロセス変数の空間内でユニークな名前を計算し、その名前でオブジェクト用に新しい変数を作成します (このメカニズムはコンパイルモードでも使用することができます)。この一時的な変数はフォームが閉じられるときに破棄されます。
4Dコード中で、ダイナミック変数にはOBJECT Get pointerコマンドで取得できるポインターを通してアクセスできます。例えば: // "tstart"オブジェクトの変数に時刻12:00:00を代入する このメカニズムを使用する利点は2つあります:
注: 変数名が指定されていない場合、フォームエディター上にはクォーテーションマークだ囲まれたオブジェクト名が表示されます (デフォルトでオブジェクトに変数名が表示される場合)。 |
プロパティ
プロダクト: 4D 参照
データタイプ ARTICLE USAGE
ランゲージリファレンス ( 4D v12.4) Inherited from :
変数 ( 4D v11 SQL Release 6) |