データタイプの概要
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 |
| Integer | 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) | Text | Bool | |||
| Date | Text | Bool | |||
| Time | Text | Bool | |||
| ブール | Num |
(1) JSON形式の文字列は JSON Parse コマンドを使ってスカラーデータ、オブジェクト、あるいはコレクションに変換することができます。
(2) 時間は数値として扱うことができます。
注: この表に示すデータ変換の他に、演算子と他のコマンドを組み合せることで、より洗練されたデータ変換を実行することができます。