メインコンテンツまでスキップ
バージョン: v18

データタイプの概要

4D においてデータは、主にデータベースフィールドと 4D ランゲージという2つの場所で、そのタイプに応じて扱われます。

この2つはおおよそ同じものですが、データベースレベルで提供されているいくつかのデータタイプはランゲージにおいては直接利用可能ではなく、自動的に適宜変換されます。 同様に、いくつかのデータタイプはランゲージでしか利用できません。 各場所で利用可能なデータタイプと、ランゲージでの宣言の仕方の一覧です:

データタイプデータベースランゲージ変数宣言
文字列テキストに変換-
テキストC_TEXT, ARRAY TEXT
日付C_DATE, ARRAY DATE
時間C_TIME, ARRAY TIME
ブールC_BOOLEAN, ARRAY BOOLEAN
整数倍長整数に変換ARRAY INTEGER
倍長整数C_LONGINT, ARRAY LONGINT
64ビット整数◯ (SQL)実数に変換-
実数C_REAL, ARRAY REAL
未定義--
Null--
ポインター-C_POINTER, ARRAY POINTER
ピクチャーC_PICTURE, ARRAY PICTURE
BLOBC_BLOB, ARRAY BLOB
オブジェクトC_OBJECT, ARRAY OBJECT
コレクション-C_COLLECTION
バリアント(2)-C_VARIANT

(1) ORDA では、オブジェクト (エンティティ) を介してデータベースフィールドを扱うため、オブジェクトにおいて利用可能なデータタイプのみがサポートされます。 詳細については オブジェクト のデータタイプの説明を参照ください。

(2) バリアントは実際のところ データ タイプではなく、あらゆるデータタイプの値を格納することのできる 変数 タイプです。

デフォルト値

コンパイラー指示子によって変数の型が決まるとき、変数はデフォルトの値を受け取り、割り当てがされない限りセッションの間はその値を保ち続けます。

デフォルトの値は、変数の型とカテゴリ、その実行コンテキスト (インタープリターかコンパイルか) に加え、コンパイルモードではデータベース設定のコンパイラーページで定義されたコンパイルオプションによって決まります:

  • プロセス変数およびインタープロセス変数は常に "ゼロにする" に設定されます。つまり、型によって、"0"、空の文字列、空のBlob、Nilポインター、空の日付 (00-00-00)、ということです。
  • ローカル変数は以下の様に設定されます:
    • インタープリタモード: ゼロにする
    • コンパイルモードにおいては、データベース設定のローカル変数初期化オプションによって異なります:
      • "ゼロにする" が選択されている場合にはゼロになります。
      • "ランダム値にする" が選択されている場合には、数値と時間については0x72677267、ブールについては常に true、他のものについては "ゼロにする" の場合と同じです。
      • "なし" が選択されている場合には、変数は初期化されず、メモリにある値が採用されます。それは、別の変数に以前使われた値かもしれません。 注: 4D では "ゼロにする" の設定を推奨しています。

以下の表はこれらのデフォルトの値をあらわしたものです:

インタープロセス変数 / プロセス変数 / インタープリターモードのローカル変数 / コンパイルモードで "ゼロにする" のローカル変数コンパイルモードで "ランダム値にする" のローカル変数コンパイルモードで "なし" のローカル変数
ブールfalsetruetrue (場合による)
日付00-00-0000-00-0000-00-00
倍長整数01919382119909540880 (場合による)
時間00:00:00533161:41:59249345:34:24 (場合による)
ピクチャーピクチャーサイズ=0ピクチャーサイズ=0ピクチャーサイズ=0
実数01.250753659382e+2431.972748538022e-217 (場合による)
ポインターNil=trueNil=trueNil=true
テキスト""""""
BLOBBLOB サイズ=0BLOB サイズ=0BLOB サイズ=0
オブジェクトnullnullnull
コレクションnullnullnull
バリアントundefinedundefinedundefined

データタイプの変換

4D ランゲージには、データタイプ間の変換をおこなう演算子やコマンドがあります。 4D ランゲージはデータタイプをチェックします。 たとえば、"abc"+0.5+!12/25/96!-?00:30:45?のように記述することはできません。 これは、シンタックス (構文) エラーになります。

次の表は、基本のデータタイプ、変換できるデータタイプ、それを実行する際に使用するコマンドを示しています:

データタイプ文字列に変換数値に変換日付に変換時間に変換ブールに変換
文字列 (1)NumDateTimeBool
数値 (2)StringBool
日付StringBool
時間StringBool
ブールNum

(1) JSON形式の文字列は JSON Parse コマンドを使ってスカラーデータ、オブジェクト、あるいはコレクションに変換することができます。

(2) 時間は数値として扱うことができます。

注: この表に示すデータ変換の他に、演算子と他のコマンドを組み合せることで、より洗練されたデータ変換を実行することができます。