Type

値のクラス名を返します。

ClassName := Type(Value)

戻り値

型:文字列

この関数は、Valueのクラス名を返します。

値のクラス名を決定するアルゴリズムは、おおよそ以下のようになります:

TypeOf(Value)
{
    if (comClass := ComObjType(Value, "Class")) != ""
        return comClass
    try ; `Value is Object` is not checked because it can be false for prototypes.
        if ObjHasOwnProp(Value, "__Class")
            return "Prototype"
    while Value := ObjGetBase(Value)
        if ObjHasOwnProp(Value, "__Class")
            return Value.__Class
    return "Object"
}

COMラッパー・オブジェクトの場合、以下のようにバリアント・タイプに基づいてクラス名を決定することもできます:

ComObject_Type(obj)
{
    if ComObjType(obj) & 0x2000 ; VT_ARRAY
        return "ComObjArray" ; ComObjArray.Prototype.__Class
    if ComObjType(obj) & 0x4000 ; VT_BYREF
        return "ComValueRef" ; ComValueRef.Prototype.__Class
    if (ComObjType(obj) = 9 || ComObjType(obj) = 13) ; VT_DISPATCH || VT_UNKNOWN
        && ComObjValue(obj) != 0
    {
        if (comClass := ComObjType(obj, "Class")) != ""
            return comClass
        if ComObjType(obj) = 9 ; VT_DISPATCH
            return "ComObject" ; ComObject.Prototype.__Class
    }
    return "ComValue" ; ComValue.Prototype.__Class
}

備考

数値文字列は数式やほとんどの組み込み関数で有効なため、通常、この関数は値が数値かどうかを判断するために使われることはありません。しかし、値の正確な型の方が重要な場合もあります。このような場合は、Typeの代わりにValue is Numberなどを使用することを検討してください。

ある値が数値として使えるかどうかを調べるには、IsNumber関数、IsInteger関数、またはIsFloat関数を使います。

あらゆるタイプのオブジェクト(つまり、プリミティブ値でないもの)をチェックするには、IsObject関数を使います。

値が特定のクラスのインスタンスであるかどうかをチェックするには Is演算子を使います。これは、プリミティブ値やCOMラッパー・オブジェクトの識別にも使用できます。

Values, Expressions, Is functions, Integer, Float, String

abcに格納されている値の正確な型を取得し、報告します。

a := 1, b := 2.0, c := "3"
MsgBox Type(a)  ; Integer
MsgBox Type(b)  ; Float
MsgBox Type(c)  ; String