4D v16.3

Type

ホーム

 
4D v16.3
Type

Type 


 

Type ( fieldVar ) -> 戻り値 
引数   説明
fieldVar  フィールド, 変数 in テストするフィールドまたは変数
戻り値  倍長整数 in データタイプ番号

説明   

Type コマンドは、fieldVarで渡したフィールドや変数のタイプを示す数値を返します。

4Dは、Field and Variable Types テーマ内に以下のような定義済み定数を持っています:

定数
Array 2D 倍長整数 13
Blob array 倍長整数 31
Boolean array 倍長整数 22
Date array 倍長整数 17
Integer array 倍長整数 15
Is alpha field 倍長整数 0
Is BLOB 倍長整数 30
Is Boolean 倍長整数 6
Is date 倍長整数 4
Is float 倍長整数 35
Is integer 倍長整数 8
Is integer 64 bits 倍長整数 25
Is JSON null 倍長整数 255
Is longint 倍長整数 9
Is object 倍長整数 38
Is picture 倍長整数 3
Is pointer 倍長整数 23
Is real 倍長整数 1
Is string var 倍長整数 24
Is subtable 倍長整数 7
Is text 倍長整数 2
Is time 倍長整数 11
Is undefined 倍長整数 5
LongInt array 倍長整数 16
Object array 倍長整数 39
Picture array 倍長整数 19
Pointer array 倍長整数 20
Real array 倍長整数 14
String array 倍長整数 21
Text array 倍長整数 18
Time array 倍長整数 32

Notes:

  • Type はグラフ変数に適用されると 9 (Is Longint) を返します。
  • 4D v11より、Type が2次元配列の行に適用されると、実際の配列の型を返すようになりました。以前はArray 2D が返されました (例題 4参照)。
  • 4D v11より、Type は文字変数や文字配列に対しそれぞれ Is TextText array を返すようになりました。このバージョンからは文字変数とテキスト変数の間に違いはありません。

Type をフィールド、インタープロセス変数、プロセス変数、ローカル変数、そしてこれらのオブジェクトタイプを参照するポインタの逆参照に適用することができます。Type を引数 ($1,$2..., ${...}) やプロジェクトメソッド、戻り値 ($0)に使用できます。

APPEND DATA TO PASTEBOARD コマンドの例題参照

DRAG AND DROP PROPERTIES コマンドの例題参照

以下のプロジェクトメソッドは、テーブルのカレントレコードのフィールドの一部あるいはすべてをクリアします。テーブルは、ポインタ引数として渡されます。カレントレコードの削除や変更は行いません

  ` EMPTY RECORD Project Method
  ` EMPTY RECORD ( Pointer {; Long } )
  ` EMPTY RECORD ( -> [table] { ; type Flags } )
 
 C_POINTER($1)
 C_LONGINT($2;$vlTypeFlags)
 
 If(Count parameters>=2)
    $vlTypeFlags:=$2
 Else
    $vlTypeFlags:=0xFFFFFFFF
 End if
 For($vlField;1;Get last field number($1))
    $vpField:=Field(Table($1);$vlField)
    $vlFieldType:=Type($vpField->)
    If($vlTypeFlags ??$vlFieldType )
       Case of
          :(($vlFieldType=Is alpha field)|($vlFieldType=Is text))
             $vpField->:=""
          :(($vlFieldType=Is real)|($vlFieldType=Is integer)|($vlFieldType=Is longint))
             $vpField->:=0
          :($vlFieldType=Is date)
             $vpField->:=!00/00/00!
          :($vlFieldType=Is time)
             $vpField->:=?00:00:00?
          :($vlFieldType=Is Boolean)
             $vpField->:=False
          :($vlFieldType=Is picture)
             C_PICTURE($vgEmptyPicture)
             $vpField->:=$vgEmptyPicture
          :($vlFieldType=Is subtable)
             Repeat
                ALL SUBRECORDS($vpField->)
                DELETE SUBRECORD($vpField->)
             Until(Records in subselection($vpField->)=0)
          :($vlFieldType=Is BLOB)
             SET BLOB SIZE($vpField->;0)
       End case
    End if
 End for


このプロジェクトメソッドをデータベースに作成後、以下のように使用できます:

  ` テーブル [Things To Do]のカレントレコードを空にする
 EMPTY RECORD(->[Things To Do])
 
  ` テーブル [Things To Do]のカレントレコードのテキスト, BLOB, ピクチャを空にする
 EMPTY RECORD(->[Things To Do];0?+Is text?+Is BLOB?+Is picture)
 
  ` テーブル [Things To Do] のカレントレコードの文字フィールド以外を空にする
 EMPTY RECORD(->[Things To Do];-1?-Is alpha field)

汎用コードを書くなど特別なケースで、配列が標準の配列か、2次元配列の行かを知りたい場合があるとします。以下のように書くことができます:

 ptrmyArr:=->myArr{6} ` myArr{6} 2D 配列か?
 RESOLVE POINTER(ptrmyArr;varName;tableNum;fieldNum)
 If(varName#"")
    $ptr:=Get pointer(varName)
    $thetype:=Type($ptr->)
  ` myArr{6} が2次元配列の行なら$thetype は 13になる
 End if



参照 

Is a variable
Undefined

 
プロパティ 

プロダクト: 4D
テーマ: ランゲージ
番号: 295

This command can be run in preemptive processes

 
履歴 

変更: 4D v11 SQL

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)