« TypeName() と VarType() の違いに注意。 | トップページ | WScriptオブジェクトの簡単ラッパーオブジェクト »

2008年4月22日 (火)

IsEmpty() などは使わないこと。

ヘルプには以下のように書いてありますが、これを真に受けてはいけません。

---
IsEmpty 関数
変数が初期化されたかどうかを調べ、結果をブール値で返します。

解説
IsEmpty 関数は、指定した変数が初期化されていない場合、または、Empty 値の場合は、真 (True) を返します。
---

IsEmpty(varname) の実装は、(VarType(varname)=vbEmpty) のようで、実際には、objectが既定プロパティを持つとき、IsEmpty(object) はその既定プロパティがEmpty かどうかを返すようです。

これは障害だと思いますが、詮無きことなので、もし、varname を評価したければ(普通はそうですが)、

Function IsEmpty2(varname)
  If IsObject(varname) Then
    IsEmpty2=False
  Else
    IsEmpty2=IsEmpty(varname)
  End If
End Function

のように代替します。

しかし、それよりも、なによりも、( TypeName(varname)="Empty" ) を使ったほうが簡単です。

なので、原則、IsEmpty() は使わないで、TypeName() を使いましょう。

もし、varname がオブジェクトでないことが明白なら、IsEmpty() を使うことに問題はありません。

IsObject()を除く他のIs???()も同様です。

« TypeName() と VarType() の違いに注意。 | トップページ | WScriptオブジェクトの簡単ラッパーオブジェクト »