データタイプの概要
4D においてデータは、主にデータベースフィールドと 4D ランゲージという2つの場所で、そのタイプに応じて扱われます。
この2つはおおよそ同じものですが、データベースレベルで提供されているいくつかのデータタイプはランゲージにおいては直接利用可能ではなく、自動的に適宜変換されます。 同様に、いくつかのデータタイプはランゲージでしか利用できません。 各場所で利用可能なデータタイプと、ランゲージでの宣言の仕方の一覧です:
データタイプ | データベース | ランゲージ | var 宣言 | ARRAY 宣言 |
---|---|---|---|---|
文字列 | ◯ | テキストに変換 | - | - |
テキスト | ◯ | ◯ | Text | ARRAY TEXT |
日付 | ◯ | ◯ | Date | ARRAY DATE |
時間 | ◯ | ◯ | Time | ARRAY TIME |
ブール | ◯ | ◯ | Boolean | ARRAY BOOLEAN |
整数 | ◯ | 倍長整数に変換 | Integer | ARRAY INTEGER |
倍長整数 | ◯ | ◯ | Integer | ARRAY LONGINT |
64ビット整数 | ◯ (SQL) | 実数に変換 | - | - |
実数 | ◯ | ◯ | Real | ARRAY REAL |
未定義 | - | ◯ | - | - |
Null | - | ◯ | - | - |
ポインター | - | ◯ | Pointer | ARRAY POINTER |
ピクチャー | ◯ | ◯ | Picture | ARRAY PICTURE |
BLOB | ◯ | ◯ | Blob , 4D.Blob | ARRAY BLOB |
オブジェクト | ◯ | ◯ | Object | ARRAY OBJECT |
コレクション | - | ◯ | Collection | |
バリアント(2) | - | ◯ | Variant |
(1) ORDA では、オブジェクト (エンティティ) を介してデータベースフィールドを扱うため、オブジェクトにおいて利用可能なデータタイプのみがサポートされます。 詳細については オブジェクト のデータタイプの説明を参照ください。
(2) バリアントは実際のところ データ タイプではなく、あらゆるデータタイプの値を格納することのできる 変数 タイプです。
デフォルト値
明示的な宣言 によって 変数 または 引数 の型が決まるとき、変数はデフォルトの値を受け取り、割り当てがされない限りセッション中はその値を保ち続けます。
デフォルト値は変数の型に依存します:
型 | デフォルト値 |
---|---|
ブール | false |
日付 | 00-00-00 |
倍長整数 | 0 |
Time | 00:00:00 |
ピクチャー | ピクチャーサイズ=0 |
実数 | 0 |
ポインター | Nil=true |
テキスト | "" |
BLOB | BLOB サイズ=0 |
オブジェクト | null |
コレクション | null |
バリアント | undefined |
デフォルト値としての Null
Object型、Collection型、Pointer型、Picture型の変数は、デフォルト値として null を持ちますが、実際には宣言後で割り当て前の場合には中間的な状態になります。 これらは null 値の ように振る舞います が、コードがそれらにアクセスしようとしたときに発生するエラーが少なくなるなど、多少の違いがあります。
データタイプの変換
4D ランゲージには、データタイプ間の変換をおこなう演算子やコマンドがあります。 4D ランゲージはデータタイプをチェックします。 たとえば、"abc"+0.5+!12/25/96!-?00:30:45?のように記述することはできません。 これは、シンタックス (構文) エラーになります。
次の表は、基本のデータタイプ、変換できるデータタイプ、それを実行する際に使用するコマンドを示しています:
データタイプ | 文字列に変換 | 数値に変換 | 日付に変換 | 時間に変換 | ブールに変換 |
---|---|---|---|---|---|
文字列 (1) | Num | Date | Time | Bool | |
数値 (2) | String | Bool | |||
日付 | String | Bool | |||
Time | String | Bool | |||
ブール | Num |
(1) JSON形式の文字列は JSON Parse
コマンドを使ってスカラーデータ、オブジェクト、あるいはコレクションに変換することができます。
(2) 時間は数値として扱うことができます。
注: この表に示すデータ変換の他に、演算子と他のコマンドを組み合せることで、より洗練されたデータ変換を実行することができます。