LoginSignup
11
8

More than 5 years have passed since last update.

VBScriptのディクショナリの参照の罠

Last updated at Posted at 2016-05-20

VBScriptには辞書型のオブジェクト Scripting.Dictionary があります。
が、このオブジェクトにはちょっとした罠が潜んでいます。
それは「存在しないキーに対して値を取得しようとするとキーを作成してしまう」というものです。

項目を変更するときに引数 key で指定したキーが見つからない場合、newitem で指定した項目と関連付けられた、引数 key で指定した新しいキーが作成されます。また、既存の項目を取得するときに引数 key で指定したキーが見つからない場合は、空の項目と関連付けられた、引数 key で指定した新しいキーが作成されます。

以下、実際に試したコードです。

Option Explicit

Dim objDict, sKey
Set objDict = CreateObject("Scripting.Dictionary")

' "hoge" キーを追加
objDict.Add "hoge", "hogehoge"

' この時点では "hoge" キーのみ表示される
For Each sKey In objDict.Keys
    WScript.Echo skey & " => " & objDict(sKey)
Next

' 存在しないキーにアクセスすると Empty が返る
If IsEmpty(objDict("fuga")) Then
    WScript.Echo "objDict(""fuga"") is Empty" ' こちらが表示される
Else
    WScript.Echo "objDict(""fuga"") is not Empty"
End If

' "hoge", "fuga" の両方が表示される
For Each sKey In objDict.Keys
    WScript.Echo skey & " => " & objDict(sKey)
Next

対策としては objDict.Exists("fuga") でキーを問い合わせることです。

11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8