ここは旧式の4DドキュメントWebサイトです。最新のアップデートされたドキュメントを読むには新サイトをご利用下さい→ developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v19.8
型指定ガイド
|
チェックボックス |
3Dチェックボックス |
ボタン |
ハイライトボタン |
透明ボタン |
3Dボタン |
ピクチャボタン |
グリッドボタン |
ラジオボタン |
3Dラジオボタン |
ラジオピクチャ |
ピクチャメニュー |
階層ポップアップメニュー |
階層リスト |
ルーラ |
ダイヤル |
サーモメータ |
リストボックス(選択型) |
注:ルーラ、ダイアルおよびサーモメータのフォーム変数については、例えば環境設定のボタン型に倍長整数を選んだとしても、常に実数型に設定されます。
上記いずれかの変数に対して、データ型の矛盾が起こるとすれば、それは同一の変数名がデータベース内に存在する場合です。この場合は、いずれか1つの変数名を変更してください。
プラグインエリアは常に倍長整数型に設定されるので、型の不一致が生じることはありません。もしデータ型の矛盾が起こるとすれば、それは同一の変数名がデータベース内に存在する場合です。この場合は、いずれか1つの変数名を変更してください。
4D Write Pro エリアおよび4D View Pro エリアは常にオブジェクト型変数になります。アプリケーションの他の部分で同じ変数名が使用されている場合を除き、型指定の矛盾は起こりません。
テキスト型に設定されるフォーム変数は以下のとおりです。
入力不可変数 |
入力可変数 |
ドロップダウンリスト |
メニュー、ドロップダウンリスト |
スクロールエリア |
コンボボックス |
ポップアップメニュー |
タブコントロール |
Webエリア |
配列型リストボックスのカラム |
これらの変数は2つのカテゴリーに分類できます。
- 単純変数:入力可、入力不可の変数それぞれのリストボックスはフォーム内に複数の変数を追加します。これらの変数のデフォルトの型はリストボックスの型によります:
配列型リストボックス | 選択型リストボックス | コレクション/エンティティセレクション型リストボックス | |
リストボックス | ブール配列 | 数値(不使用) | コレクションまたはエンティティセレクション |
リストボックスのカラム | テキスト配列 | 動的型指定 | 動的型指定 |
ヘッダー | 数値 | 数値 | 数値 |
フッター | 動的型指定 | 動的型指定 | 動的型指定 |
行管理配列 | ブール配列(倍長整数配列も受け入れ可能) | - | - |
スタイル | 倍長整数配列 | 倍長整数 | 倍長整数 |
フォントカラー | 倍長整数配列 | 倍長整数 | 倍長整数 |
背景色 | 倍長整数配列 | 倍長整数 | 倍長整数 |
コンパイル時に矛盾が発生しないように、これらの変数と配列を正しく指定するように気をつけて下さい。
ポインターを使うと、4Dツールの強力で多彩な機能を活用することができます。
コンパイル後もポインターの利点をそのまま活用できます。1つのポインターでデータ型の異なる変数を指定することができます。1つの変数に異なるデータ型を代入して矛盾を引き起こさないようにしてください。また、ポインターで参照する変数のデータ型を変更しないよう注意してください。
この問題の例を示します。
Variable:=5.3
Pointer:=->Variable
Pointer->:=6.4
Pointer->:=False
この例では、ポインターで参照する変数の型は実数です。これにブール値を代入しているので、データ型の矛盾が起こります。
1つのメソッド内で、異なった目的のためにポインターを使う場合には、参照先の変数型を決定してください。
ポインターは、常に参照するオブジェクトとの関連で定義されています。このため、ポインターによるデータ型の矛盾をコンパイラが検知することはできません。矛盾があっても、変数設定フェーズやコンパイルフェーズでは、エラーメッセージが出力されません。ただし、ポインターに関係する矛盾を見つける方法がまったくないわけではありません。当該コードにおいて範囲チェックが無効化されていなければ、コンパイラはポインターの使用を検証します。
コンパイルの際、コンパイラはデータベースで使用されるプラグインコマンドのパラメータの数や型定義などについて解析します。メソッドからのプラグイン呼び出しが、プログラム記述の段階で一致していれば、矛盾が生じる危険はありません。
プラグインは、PlugIns フォルダに入れることでインストールします。フォルダは、4Dに許可されている次のいずれかの場所に置きます。
ス トラクチャファイルと同階層または、Windowsでは実行可能なアプリケーションの隣、またはMacintoshではソフトウェアパッケージ内です。詳細はプラグインやコンポーネントのインストール を参照してください。
コンパイラは、これらのファイルを複製しませんが、コマンドの宣言を考慮し、ユーザーに追加の情報をたずねることはありません。
プラグインを見つけることができない場合、コンパイラはファイルを開くダイアログボックスを表示してプラグインの場所を確認します。
特定のプラグイン(例えば4D Write)コマンドの中には、暗黙に4Dコマンドを呼び出すものがあります。例えば4D Writeの場合、コマンドのシンタックスは次のようになります。
WR ON EVENT(area;event;eventMethod)
最後の引数は、4Dで作成したメソッドの名前です。このメソッドはイベントが受け取られるたびに4D Writeによって呼び出され、自動的に次の引数を受け取ります。
引数 | 型 | 説明 |
$0 | 倍長整数 | 戻り値 |
$1 | 倍長整数 | 4D Write エリア |
$2 | 倍長整数 | Shift key |
$3 | 倍長整数 | Alt key (Windows); Option key (Mac OS) |
$4 | 倍長整数 | Ctrl key (Windows), コマンド key (Mac OS) |
$5 | 倍長整数 | イベント型 |
$6 | 倍長整数 | イベント引数の値 |
コンパイラがこれらの引数の存在を認識し、これらを考慮するためには、引数をコンパイラコマンド、またはメソッド内での使用法によって型設定しなければなりません。メソッドで使用する場合には、型を明確に推測できるように使用する必要がありま
す。
4Dを使い、4Dコンポーネントの作成および管理が可能です。(マトリクスデータベースと呼ばれる) 4Dコンポーネントは一連の4Dオブジェクトで、ストラクチャファイルにいくつかの機能がまとめられています。コンポーネントは他のデータベース (ホストデータベース) にインストールできます。
インタプリタモードで動作するホストデータベースは、インタプリタおよびコンパイル済みのコンポーネントを使用できます。一つのホストデータベース にインタプリタおよびコンパイル済みのコンポーネントを同時にインストールできます。他方、コンパイルモードのホストデータベースは、インタプリタモード のコンポーネントを使用できません。コンパイル済みのコンポーネントのみが使用できます。
インタプリタモードのコンポーネントを含むインタプリタのホストデータベースは、インタプリタモードのコンポーネントメソッドを呼ばない限り、コンパイルできます。もし呼び出している場合は、警告ダイアログが表示され、コンパイルに失敗します。
コンポーネントの共有メソッドがホストデータベースのプロジェクトメソッドと同じ名前の場合、名前の衝突が発生します。この場合、ホストデータベー スのコンテキストでコードが実行される際、ホストデータベースのメソッドが呼び出されます。これはコンポーネントのメソッドをカスタムメソッドでマスクす ることが可能であることを意味します (例えば異なる機能を実装するために)。コンポーネントのコンテキストでコードが実行されるときは、コンポーネントのメソッドが呼び出されます。ホスト データベースをコンパイルする際、このマスクは警告として記録されます。
二つのコンポーネントが同じ名前の共有メソッドを公開している場合は、ホストデータベースのコンパイルの際、エラーが生成されます。
コンポーネントに関する詳細は、Design Referenceマニュアルを参照してください。
ローカル変数の処理はこれまでに述べた規則に従います。他の変数と同様、メソッドの実行中にデータ型を変更することはできません。ここでは、型の矛盾を起こす可能性のある2つのケースについて検証します。
変数型を変更することはできませんが、ポインタを使用して異なるデータ型を参照することはできます。例えば、1次元配列 のメモリサイズを返す関数を考えてみてください。この場合、メモリサイズを数字で表せないテキスト配列とピクチャ配列を除き、実数の結果のみを返します(の節を参照してください)。
また、テキスト配列とピクチャ配列については、文字列の結果を返します。この関数の引数は、メモリサイズを調べようとする配列へのポインタです。この操作を行うには2つの方法があります。
MemSize機能のインタプリタモードでのみ動作する例(Macintoshを使用する場合の例)
$Size:=Size of array($1->)
$Type:=Type($1->)
Case of
:($Type=Real array)
$0:=8+($Size*10) ` $0は実数
:($Type=Integer array)
$0:=8+($Size*2)
:($Type=LongInt array)
$0:=8+($Size*4)
:($Type=Date array)
$0:=8+($Size*6)
:($Type=Text array)
$0:=String(8+($Size*4))+("+Sum of text lengths") ` $0はテキスト
:($Type=Picture array)
$0:=String(8+($Size*4))+("+Sum of picture sizes") ` $0はテキスト
:($Type=Pointer array)
$0:=8+($Size*16)
:($Type=Boolean array)
$0:=8+($Size/8)
End case
このメソッドでは、$0のデータ型が$1の配列によって異なるため、コンパイルできません。
MemSize機能のインタプリタモードおよびコンパイルモードで動作可能なバージョン(Macintoshを使用する場合の例)
これはポインタを使用する方法です。
$Size:=Size of array($1->)
$Type:=Type($1->)
VarNum:=0
Case of
:($Type=Real array)
VarNum:=8+($Size*10) ` VarNumは実数l
:($Type=Integer array)
VarNum:=8+($Size*2)
:($Type=LongInt array)
VarNum:=8+($Size*4)
:($Type=Date array)
VarNum:=8+($Size*6)
:($Type=Text array)
VarText:=String(8+($Size*4))+("+Sum of text lengths")
:($Type=Picture array)
VarText:=String(8+($Size*4))+("+Sum of picture sizes")
:($Type=Pointer array)
VarNum:=8+($Size*16)
:($Type=Boolean array)
VarNum:=8+($Size/8)
End case
If(VarNum#0)
$0:=->VarNum
Else
$0:=->VarText
End if
2つの関数は、以下の点が違っています。
コンパイラは、引数の間接参照の機能をサポートしています。インタプリタでは、引数のデータ型と数値を自由に設定でき ます。データ型の矛盾を起こさない限り(呼ばれた側でセットされていない引数を使用しないこと)、コンパイルモードでも同様に自由に設定することができま す。
型の矛盾の元になるので、間接参照する引数は、すべて同じデータ型でなければなりません。
この間接参照は以下の条件を守ることにより、正しく動作します:引数の一部のみを間接参照する場合、直接参照の引数の後に間接参照引数を配置するようにします。
メソッド内で、間接参照は${$i}のように表示します。$iは数値変数です。${$i}を「ジェネリックパラメータ(generic parameter)」と呼びます。
以下は間接参照の例です。数値を合計し、引数として渡されたフォーマットに編集して返すような関数を考えてください。合計される元の数値は、メソッドが呼ばれるたびに変わります。このメソッドでは数値と編集フォーマットを引数としてメソッドに渡さなければなりません。
この関数は、以下のようにして呼び出します。
Result:=MySum("##0.00";125,2;33,5;24)
この場合、数値を合計し、指定したフォーマットに編集された"182.70"が返されます。関数の引数は正しい順序で渡してください。最初にフォーマット、次に値です。
以下はMySum関数です。
$Sum:=0
For($i;2;Count parameters)
$Sum:=$Sum+${$i}
End for
$0:=String($Sum;$1)
この関数は次の方法で呼び出すことができます。
Result:=MySum("##0.00";125,2;33,5;24)
Result:=MySum("000";1;18;4;23;17)
他のローカル変数と同様、ジェネリックパラメータはコンパイラに指示する必要はありません。ただし、曖昧になりそうな場合や最適化のために必要な場合は以下のシンタックスを使用することができます。
C_LONGINT(${4})
このコマンドは、4番目以降に間接参照されたすべての引数のデータ型が倍長整数であることを意味します。$1、$2、$3には、いかなるデータ型も使用できますが、$2を間接参照した場合には影響を受けます。このため、実数であってもデータ型は倍長整数と見なされます。
注:コンパイラはこのコマンドを変数設定フェーズで使います。定義に使用する数値は変数ではなく、定数でなくてはなりません。
4Dの変数および定数には、コンパイラによってデータ型および識別子が割り当てられているものがあります。このため、ユーザはこれらの変数名や定数 を、新しい変数やメソッド、関数、プラグインコマンドの名前に使用することはできません。インタリタモードで行うのと同じ方法で、これらの値を検証し使用するこ とができます。
4Dのシステム変数およびそれに対応するデータ型の完全な一覧は以下のとおりです。
変数 | 型 |
OK | 倍長整数 |
Document | テキスト |
FldDelimit | 倍長整数 |
RecDelimit | 倍長整数 |
Error | 倍長整数 |
Error method | テキスト |
Error line | 倍長整数 |
MouseDown | 倍長整数 |
KeyCode | 倍長整数 |
Modifiers | 倍長整数 |
MouseX | 倍長整数 |
MouseY | 倍長整数 |
MouseProc | 倍長整数 |
クイックレポートで計算用のカラムを作成する際、最初のカラムに変数C1を2番目にはC2を、そして3番目のカラムにはC3をというように4Dが自動的に変数を作成します。この処理はユーザには見えません。
これらの変数をメソッド内で使用する場合、他の変数と同様C1、C2...Cnは型変更することができませんので、留意してください。
4Dで定義されている定数は定数テーマリストを使用して見つけることができます。4Dの定数は、デザインモードのエクスプローラーにも表示されます。
プロダクト: 4D
テーマ: コンパイラ
変更: 4D v15 R4
ランゲージリファレンス ( 4D v19)
ランゲージリファレンス ( 4D v19.1)
ランゲージリファレンス ( 4D v19.4)
ランゲージリファレンス ( 4D v19.5)
ランゲージリファレンス ( 4D v19.6)
ランゲージリファレンス ( 4D v19.7)
ランゲージリファレンス ( 4D v19.8)