データタイプの概要
4D においてデータは、主にデータベースフィールドと 4D ランゲージという2つの場所で、そのタイプに応じて扱われます。
この2つはおおよそ同じものですが、データベースレベルで提供されているいくつかのデータタイプはランゲージにおいては直接利用可能ではなく、自動的に適宜変換されます。 同様に、いくつかのデータタイプはランゲージでしか利用できません。 各場所で利用可能なデータタイプと、ランゲージでの宣言の仕方の一覧です:
データタイプ | データベース | ランゲージ | 変数宣言 |
---|---|---|---|
文字列 | ◯ | テキストに変換 | - |
テキスト | ◯ | ◯ | C_TEXT , ARRAY TEXT |
Date | ◯ | ◯ | C_DATE , ARRAY DATE |
Time | ◯ | ◯ | C_TIME , ARRAY TIME |
ブール | ◯ | ◯ | C_BOOLEAN , ARRAY BOOLEAN |
整数 | ◯ | 倍長整数に変換 | ARRAY INTEGER |
Longint | ◯ | ◯ | C_LONGINT , ARRAY LONGINT |
64ビット整数 | ◯ (SQL) | 実数に変換 | - |
実数 | ◯ | ◯ | C_REAL , ARRAY REAL |
未定義 | - | ◯ | - |
Null | - | ◯ | - |
ポインター | - | ◯ | C_POINTER , ARRAY POINTER |
ピクチャー | ◯ | ◯ | C_PICTURE , ARRAY PICTURE |
BLOB | ◯ | ◯ | C_BLOB , ARRAY BLOB |
オブジェクト | ◯ | ◯ | C_OBJECT , ARRAY OBJECT |
Collection | - | ◯ | C_COLLECTION |
バリアント(2) | - | ◯ | C_VARIANT |
(1) ORDA では、オブジェクト (エンティティ) を介してデータベースフィールドを扱うため、オブジェクトにおいて利用可能なデータタイプのみがサポートされます。 詳細については オブジェクト のデータタイプの説明を参照ください。
(2) バリアントは実際のところ データ タイプではなく、あらゆるデータタイプの値を格納することのできる 変数 タイプです。
デフォルト値
コンパイラー指示子によって変数の型が決まるとき、変数はデフォルトの値を受け取り、割り当てがされない限りセッションの間はその値を保ち続けます。
デフォルトの値は、変数の型とカテゴリ、その実行コンテキスト (インタープリターかコンパイルか) に加え、コンパイルモードではデータベース設定のコンパイラーページで定義されたコンパイルオプションによって決まります:
- プロセス変数およびインタープロセス変数は常に "ゼロにする" に設定されます。つまり、型によって、"0"、空の文字列、空のBlob、Nilポインター、空の日付 (00-00-00)、ということです。
- ローカル変数は以下の様に設定されます:
- インタープリタモード: ゼロにする
- コンパイルモードにおいては、データベース設定のローカル変数初期化オプションによって異なります:
- "ゼロにする" が選択されている場合にはゼロになります。
- "ランダム値にする" が選択されている場合には、数値と時間については0x72677267、ブールについては常に true、他のものについては "ゼロにする" の場合と同じです。
- "なし" が選択されている場合には、変数は初期化されず、メモリにある値が採用されます。それは、別の変数に以前使われた値かもしれません。 注: 4D では "ゼロにする" の設定を推奨しています。
以下の表はこれらのデフォルトの値をあらわしたものです:
型 | インタープロセス変数 / プロセス変数 / インタープリターモードのローカル変数 / コンパイルモードで "ゼロにする" のローカル変数 | コンパイルモードで "ランダム値にする" のローカル変数 | コンパイルモードで "なし" のローカル変数 |
---|---|---|---|
ブール | false | true | true (場合による) |
Date | 00-00-00 | 00-00-00 | 00-00-00 |
倍長整数 | 0 | 1919382119 | 909540880 (場合による) |
Time | 00:00:00 | 533161:41:59 | 249345:34:24 (場合による) |
ピクチャー | ピクチャーサイズ=0 | ピクチャーサイズ=0 | ピクチャーサイズ=0 |
実数 | 0 | 1.250753659382e+243 | 1.972748538022e-217 (場合による) |
ポインター | Nil=true | Nil=true | Nil=true |
テキスト | "" | "" | "" |
BLOB | BLOB サイズ=0 | BLOB サイズ=0 | BLOB サイズ=0 |
オブジェクト | null | null | null |
コレクション | null | null | null |
Variant | undefined | undefined | undefined |
データタイプの変換
4D ランゲージには、データタイプ間の変換をおこなう演算子やコマンドがあります。 4D ランゲージはデータタイプをチェックします。 たとえば、"abc"+0.5+!12/25/96!-?00:30:45?のように記述することはできません。 これは、シンタックス (構文) エラーになります。
次の表は、基本のデータタイプ、変換できるデータタイプ、それを実行する際に使用するコマンドを示しています:
データタイプ | 文字列に変換 | 数値に変換 | 日付に変換 | 時間に変換 | ブールに変換 |
---|---|---|---|---|---|
文字列 (1) | Num | Date | Time | Bool | |
数値 (2) | String | Bool | |||
Date | String | Bool | |||
Time | String | Bool | |||
ブール | Num |
(1) JSON形式の文字列は JSON Parse
コマンドを使ってスカラーデータ、オブジェクト、あるいはコレクションに変換することができます。
(2) 時間は数値として扱うことができます。
注: この表に示すデータ変換の他に、演算子と他のコマンドを組み合せることで、より洗練されたデータ変換を実行することができます。