4D v18

データタイプ

ホーム

 
4D v18
データタイプ

データタイプ  


 

 

4Dのフィールド、変数、式は以下のデータタイプとなり得ます:
データタイプフィールド変数
文字列 (*1)
数値 (*2)
日付
時間
ブール
ピクチャ
ポインタ×
BLOB (*3)
配列 (*4)××
64ビット整数(*5)××
オブジェクト
コレクション×
バリアント××
未定義×
Null××


*1. 文字列には、文字フィールド、固定長変数、テキストフィールド、テキスト変数があります。
*2. 数値には、実数、整数、倍長整数のフィールドと変数があります。
*3. BLOBはBinary Large OBjectの省略形です。BLOBの詳細については、 BLOBコマンド の章を参照してください。
*4. 配列にはすべてのタイプの配列が含まれます。詳細については、 配列 の章を参照してください。
*5. 64ビット整数型は、SQLによってのみ管理されます。4D言語でこれらを使用することは推奨されません。これを行うと、これらのデータタイプは実数に変換され、精度が失われることがあります。

文字列とは、以下を示す総称です:

  • 文字フィールドまたは変数: 文字フィールドには0~255文字までの文字を格納することができます(上限はフィールドが定義されたときに設定されます)。
  • テキストフィールドまたは変数: テキストフィールド、変数、または式には0~2 GBのテキストを格納することができます。
  • 任意の文字列またはテキスト式

文字列とテキスト変数には違いはありません。

文字列をテキストフィールドに割り当てることもできますし、その逆も可能です。4Dは必要に応じて変換・切り落としを自動的に行います。式の中で、文字列とテキストは混ぜて使用することが出来ます。

: このマニュアルでは、コマンド説明における文字列とテキストの引数は特に明記されていない限り、両方とも「文字列」と表記されています。

数値  

数値とは、以下を示す総称です。

  • 実数のフィールド、変数、または式
  • 整数のフィールド、変数、または式
  • 倍長整数のフィールド、変数、または式

実数データタイプの範囲は、±1.7e±308 (有効数字13桁) です。
整数データタイプ(2バイト整数)の範囲は、-32,768..32,767 (2^15..(2^15)-1)です。
倍長整数データタイプ(4バイト整数)の範囲は、-2^31..(2^31)-1です。

数値データタイプは、異なる数値データタイプに代入することができます。このとき、4Dが必要に応じて変換、切り捨て、丸め処理を行います。ただし、値が範囲外の場合には、変換は正しい値を返しません。数値データタイプは式の中に混在させて使用することができます。

: このマニュアルでは、実際のデータタイプに関わらず、コマンド説明における実数、整数、倍長整数の引数は特に明記されていない限り、数値と表記されています。

日付  

  • 日付フィールド、変数、式として認識できる範囲は、100/1/1から32,767/12/31までです。
  • 日本語版の4Dを使用した場合、日付の順序は年/月/日の順になります。
  • 年を2桁で指定され、30未満の場合2000年代であると解釈されます。30以上の場合は1900年代であると解釈されます。(このデフォルト設定は、SET DEFAULT CENTURY コマンドで変更できます)。
  • C_DATE によって宣言された日付は32767年までの範囲に対応していますが、システムを経由する処理によっては上限にさらなる制限が課せられます。

: このマニュアルでは、コマンド説明における日付引数は特に明記されていない限り、「日付」と表記されています。

JavaScriptにおいて日付はオブジェクトなので、4Dに送られる際には他のオブジェクト同様、JSON フォームを含んだテキストとして送られます。この原理は特に4D Mobile または Webエリア を使用する際に適用されます。
JavaScript 日付の JSON フォームは ISO 8601規格に基づき、 "2013-08-23T00:00:00Z"のように記述されます。

このテキストは、デベロッパが4Dの日付(C_DATE) へと変換してあげる必要があります。方法は二つあります。:

  • JSON Parse  コマンドを使用する方法:
     C_TEXT($1// 日付をISOフォーマットで受け取る
     C_DATE($d)
     $d:=JSON Parse("\""+$1+"\"";Is date))
  • Date コマンドを使用する方法:
     C_TEXT($1// 日付をISOフォーマットで受け取る
     C_DATE($d)
     $d:=Date($1)

二つの方法の違いに注意して下さい。 JSON Parse コマンドは SET DATABASE PARAMETER を使用して設定された変換モードに従うのに対し、 Date コマンドはこれに依存しないという事です。 Date コマンドを使用した変換は、常にローカルのタイムゾーンを考慮するということです。

注: 4D v16 R6以降、カレントのデータ保存設定が"日付型"になっている場合、JSON日付文字列はJSON Parse および Date コマンドからは自動的に日付値として扱われます。この設定の詳細な情報については、互換性ページ 内の"オブジェクトではISO日付フォーマットの代わりに日付型を使用する"オプションを参照してください。

時間  

  • 時間のフィールド、変数、式の範囲は00:00:00から596,000:00:00までです。
  • 日本語版の4Dでは、時間の順序は時:分:秒の順になります。
  • 時間は24時間制です。
  • 時間の値は数値として扱うことができます。時間から返される数値は時間が表す秒数です。詳細は時間演算子の節を参照してください。

: このマニュアルでは、コマンド説明における時間引数は特に明記されていない限り、「時間」と表記されています。

ブールのフィールド、変数、式は、TRUE(真)またはFALSE(偽)のいずれかになります。

: このマニュアルでは、コマンド説明におけるブール引数は特に明記されていない限り、「ブール」と表記されています。

ピクチャのフィールド、変数、式は、任意のWindowsまたはMacintoshのピクチャになります。一般的に、ペーストボード上に置いたり、4Dコマンドやプラグインコマンドを使用してディスクから読み出すことのできる任意のピクチャがこれに含まれます。

: このマニュアルでは、コマンド説明におけるピクチャ引数は特に明記されていない限り、「ピクチャ」と表記されています。

ポインタの変数または式は、別の変数(配列、配列要素を含む)、テーブルまたはフィールドへの参照です。ポインタタイプのフィールドは、存在しません。

ポインタの詳細については、の節を参照してください。

: このマニュアルでは、コマンド説明におけるポインタ引数は特に明記されていない限り、「ポインタ」と表記されています。

BLOB  

BLOBのフィールド、変数または式は、個別にまたはBLOBコマンド を使用して利用できる一連のバイト列(長さは0バイトから2ギガバイトまで)です。

: このマニュアルでは、コマンド説明におけるBLOB引数は特に明記されていない限り、「BLOB」と表記されています。

オブジェクト型の変数、フィールド、式にはさまざまなデータを格納することができます。

4D のネイティブなオブジェクトの構造は、よくある「プロパティ/値」(または「属性/値」)というペア(連想配列)に基づいています。これらのオブジェクトの記法は JSON をもとにしていますが、完全に同じというわけではありません。

  • プロパティ名は必ずテキストで表現されます。例: "Name"など(最大255文字、大文字と小文字は区別されます)。
  • プロパティ値は以下のどれかの型で表現されます:
    • 番号(実数、整数、等)
    • テキスト
    • 配列(テキスト配列、実数配列、ブール配列、オブジェクト配列、ポインター配列)
    • null
    • ブール
    • ポインター (JSON Stringify コマンドの使用、またはコピーの際に評価されます)
    • 日付(日付型あるいはISO日付フォーマット文字列 - 互換性ページの"オブジェクトではISO日付フォーマットの代わりに日付型を使用する"を参照してください)
    • オブジェクト (オブジェクトは入れ子にすることができます)
    • ピクチャー(*)
    • コレクション

警告: 属性名は大文字と小文字を区別するという点に注意してください。

オブジェクト型の変数、フィールド、式を管理するには、オブジェクト記法 (オブジェクト記法の使用 参照)を使用するか、あるいはOB Get および OB SET などのオブジェクト(ランゲージ) テーマの 4Dコマンドを使用します。QUERY BY ATTRIBUTEORDER BY ATTRIBUTEQUERY SELECTION BY ATTRIBUTE など、クエリ テーマの特定のコマンドもオブジェクト型フィールドに対して処理を行うことができます。

オブジェクトフィールドは一般的にテキストベースのため、オブジェクトフィールドの中身は4Dフォーム内ではデフォルトではテキストとして表示されJSON形式にフォーマットされています。

(*)デバッガー内でテキストとして書き出されたりJSONへと書き出された場合、ピクチャーオブジェクトプロパティには"[object Picture]"と表示されます。注意 - レコードを後で保存する場合、属性には"[object Picture]"という文字列が保存されます。

注: JSONオブジェクトを使用するには、"JSON"テーマ内のコマンドを使用してください。

コレクション変数は、様々な型の値を順番に格納することが可能です。例:

 C_COLLECTION($col)
 $col:=New collection("Ford";"Renault";"Nissan";500;100;True)
  //$col=["Ford","Renault","Nissan",500,100,true]

サポートされる型はテキスト、数値、オブジェクト、配列、ブール型、あるいはNullです。コレクション型には式やフィールドはありません。

コレクション型変数を管理するためには、オブジェクト記法(オブジェクト記法の使用参照)と、コレクション テーマのコマンドを使用する必要があります。

  • コレクション要素はその要素番号を(インデックス)を通してアクセスします。
  • 要素を指定するには、以下のシンタックスを使用してください: myCollection[N]  ここでのN はコレクション要素インデックスを意味します。
  • 警告: コレクション要素のインデックスは0から始まります。

例:

 C_COLLECTION($col)
 $col:=New collection("Ford";"Renault";"Nissan")
 $col[1]:="BMW"
  //$col=["Ford","BMW","Nissan"]

コレクション変数はJSON配列を保存します。JSON配列はカンマで区切られた任意の型のデータの集まりです。

JSON配列をコレクションに保存することもできます。例:

 C_COLLECTION($c1;$c2)
 C_TEXT($json1;$json2)
 $c1:=JSON Parse("[\"Ford\",\"Renault\",\"Nissan\",500,100,true]")
 $json1:=JSON Stringify($c1)
  //$json1=["Ford","Renault","Nissan",500,100,true]
 $c2:=JSON Parse("[1,2,3,\"a\",\"b\",\"c\"]")
 $json2:=JSON Stringify($c2)
  //$json2=[1,2,3,"a","b","c"]

バリアント型は、固定された有効な型であれば任意のデータを変数に受け取ることができる変数型です。一般的には、この変数型は未知の型の値を返す、または受け取るような汎用的なコードを書くために使用されます。これは、例えばオブジェクトの属性を扱うようなコードがそれに該当します。

バリアント型の変数は以下のデータタイプの値を格納することができます:

  • BLOB
  • ブール
  • コレクション
  • 日付
  • 倍長整数
  • オブジェクト
  • ピクチャー
  • ポインター
  • 実数
  • テキスト
  • 時間
  • Null
  • 未定義

注: バリアント型変数に配列を保存することはできません。

インタープリタモード、コンパイルモードのどちらにおいても、同じバリアント型変数に異なる型のコンテンツを代入することができます。固定された変数型と異なり、バリアント型変数の中身の型は変数自身のバリアント型とは異なります。以下の例を見てください:

 C_VARIANT($variant)
 
 $variant:="hello world"
 $vtype:=Type($variant// 12 (Is variant)
 $vtypeVal:=Value type($variant// 2 (Is text)
 
 $variant:=42
 $vtype:=Type($variant// 12 (Is variant)
 $vtypeVal:=Value type($variant// 1 (Is real)

変数が期待されるところであれば、どこでもバリアント型変数を使用することができます。変数の中身のデータ型が予期される型であるようにする必要があります。バリアント型変数にアクセスする場合、そのカレントの値のみが考慮されます。以下の例を見てください:

 C_VARIANT($v)
 $v:="hello world"
 $v2:=$v  //assign variable to another variable
 
 $t:=Type($v// 12 (Is variant)
 $t2:=Type($v2// 2 (Is text)
 

バリアント型は、様々なタイプになりうるメソッドの引数($0, $1,...) を宣言するのに使用できます。この場合、引数の値の型をテストしていくようなコードを書くようにしてください:

 C_VARIANT($1)
 Case of
    :(Value type($1)=Is longint)
       ...
    :(Value type($1)=Is text)
       ...
 End case

注: バリアント型変数が必要ではない場合(つまりデータタイプが分かっている場合)、型が固定された変数を使用することが推奨されます。固定型変数の方がパフォーマンスやコードの可読性も良く、予期せぬデータタイプを見過ごしてしまうようなバグを防ぐため、コンパイラにもやさしいと言えます。

未定義は、実際にはデータタイプではありません。未定義は、まだ定義されていない変数を指しています。関数(結果を返すプロジェクトメソッド)は、メソッド内で、戻り値 ($0) に未定義式が代入されている場合、未定義値を返すことがあります。フィールドは、未定義にはできません (フィールドの場合、Undefined コマンドは常に False を返します)。バリアント型変数はundefined がデフォルト値となっています。

Null  

Null は唯一 "null" の値のみをとることのできる特殊なデータタイプです。この値は、値を持たない式によって返されます。

4D データベースでは、null値はデータ値が不明であることを表し、値が空 (文字列の場合は ""、倍長整数の場合は0) であることは意味しません。4D データベースにおいて、フィールドのnull値はSQL エンジンのみが扱います (オブジェクトフィールド属性の場合を除く)。専用のフィールドオプション (ヌル値を空値にマップ) によって、データベースにおいてこの値をどのように扱うかを指定することができます。また、Is field value Null および SET FIELD VALUE NULLコマンドによる null値の読み込み・設定が可能です。

 

4D ランゲージやオブジェクトフィールド属性においては、Null 関数を使ってnull値を扱います。この関数をつぎの式と組み合わせて使うことで、null値の設定や比較をおこなうことができます:

  • オブジェクトの属性
  • コレクションの要素
  • オブジェクト型、コレクション型、ポインター型、ピクチャー型、バリアント型の変数

配列  

配列は、実際にはデータタイプではありません。さまざまな種類の配列(整数配列、テキスト配列等)はこの配列という名前の下にグループ化されています。配列は変数です。配列タイプのフィールドは存在せず、配列タイプの式も存在しません。配列の詳細については、配列の節を参照してください。

: このマニュアルでは、コマンド説明における配列引数は特に明記されていない限り、「配列」と表記されています (例: テキスト配列や数値配列など)。

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

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

データタイプ文字列に変換数値に変換日付に変換時間に変換
文字列(*)NumDateTime
数値 (**)String
日付String
時間String
ブールNum
オブジェクトJSON Stringify
コレクションJSON Stringify


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

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



参照 

JSON コマンドについての概要
Type
コンパイラ指示子の使用
ポインタ
メソッド
型指定ガイド
変数
配列

 
プロパティ 

プロダクト: 4D
テーマ: プログラミング言語の構成要素

 
ページの目次 
 
履歴 

New
変更: 4D v16 R4
変更: 4D v16 R6
変更: 4D v18

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v18)