使用前の型チェック
VBScript は、型指定が厳格ではありません。つまり、データ型を最初に宣言しなくても、データの値の作成、使用、アクセスが可能です。ただし演算の中には、特定の型の値でないと実行できないものもあります。したがって、データに対して演算を実行する場合は、事前に型をチェックすることが重要です。
データ型が異なると、ステートメントによって動作も異なります。また、オブジェクトの場合は、実装によって動作が異なるため、予期しない結果を招く可能性がさらに高くなります。たとえば、<entity>_CanDelete のオブジェクトは、テキストまたはサブジェクト・ノードのいずれかになります。
ベスト・プラクティス
予期しない結果が発生しないようにするには、次の点に注意します。
-
値は、使用する前に型をチェックします。特にオブジェクト・タイプには注意が必要です。オブジェクト・タイプのチェックでは、アクセスするプロパティをそのオブジェクトに含まれているかどうかを確認してください。
注: この
-
前提とする条件はできるだけ少なくします。たとえば、値が特定の型であるというような想定はしないでください。あらゆる可能性を考慮したスクリプトを記述するには、Else ステートメントと Select Case ステートメントを使用します。
-
VBScript 関数(IsArray、IsDate、IsNull、IsEmpty、IsNumeric、IsObject など)でパラメータを使用する場合は、必ず型をチェックしてください。
-
オブジェクトの標準設定のプロパティが特定の型であるといった想定はしないでください。データ型はオブジェクトによって異なる可能性があります。
-
データ型を確実に処理するには、VBScript に組み込まれている変換関数を使用してください。
-
オブジェクトの操作では、IsNull 関数と IsEmpty 関数を呼び出すことにより、戻り値が Null または Empty でないことを確認してください。
例: 次の例では、フィールドの値は表のように宣言されているとします。
|
フィールド値 |
タイプ |
|---|---|
|
|
Integer |
|
|
String |
|
|
ISysTreeNode インタフェースを実装するオブジェクト |
次は、正しいステートメントの例です。整数値が文字列に変換されています。
If Bug_Fields["BG_BUG_ID"].Value = "10" Then...
次は、正しいステートメントの例です。文字列は比較可能です。
If Bug_Fields["BG_SUMMARY"].Value = "some text" Then...
次は、誤ったステートメントの例です。このコードを問題なく実行できるのは、BG_SUBJECT フィールドが Empty と Null のいずれでもない場合のみです。VBScript では、オブジェクトの標準設定値(つまり標準設定のプロパティ)は文字列型であるか、文字列型と比較可能な型であることが想定されますが、この条件は必ずしも満たされるわけではありません。
If Bug_Fields["BG_SUBJECT"].Value = "My Tests" Then...

