今回は「VBScriptの関数利用時に使う丸括弧」についてまとめます。
VBScript で .NET Framework のクラスを利用としていると、「Sub プロシージャ を呼び出すときにかっこを使うことはできません」というエラーが出たので原因を調べていました。 VBScript でまだ知らないルールがあったので、覚書にこの記事に残しておきます。
丸括弧の意味は4つ
VBScriptの構文において、丸括弧には以下に示す4パターンの意味がある。
- 算術演算で先に計算することを示す丸括弧 (例:
avg = (arg1 + arg2) / 2
) - 配列の要素番号を示す丸括弧 (例:
item = list(3)
) - 引数リストの範囲を示す丸括弧 (例:
retval = proc(arg1, arg2)
) - 参照渡しを値渡しに変更する丸括弧 (例:
retval = proc(arg1, (arg2))
)
上記のうち 1 と 2 は理解しやすい内容だが、2 と 3 は分かりにくいので以下に補足する。 例えば、次のような関数呼び出しを行っている文があったとき、
retval = procedure(arg1, (arg2))
外側の丸括弧 (arg1, (arg2))
が「引数リストの範囲を示す丸括弧」、
内側の丸括弧 (arg2)
が「参照渡しを値渡しに変更する丸括弧」を示している。
ちなみに…VBScriptにおいて関数の引数はデフォルト参照渡しになる点には注意。
丸括弧の適用ルール
前述の丸括弧の意味のうち3番目の「引数リストの範囲を示す丸括弧」には、さらに別のルールがある。 具体的には以下に示すようなルールがある。
- Callステートメント を利用して関数呼び出しをする場合、引数リストを示す丸括弧を記述する。
(例:Call proc1(arg1)
) - 戻り値への代入を伴う関数呼び出しをする場合、引数リストを示す丸括弧を記述する。
(例:Set retval = proc2(arg1, arg2)
) - 上記以外の場合、引数リストは丸括弧で囲まない。
(例:proc2 arg1, arg2
)
これらのルールは「参照渡しを値渡しに変更する丸括弧」ルールとは別になる。
まとめ
上記ルールのうち関数呼び出しに関してまとめると以下のような例になります。
- 関数 func に対して a も b も参照渡し
func a, b Call func(a, b) retval = func(a, b)
- 関数 func に対して a を参照渡し、 b を値渡し
func a, (b) Call func(a, (b)) retval = func(a, (b))
今回は「VBScriptにおける丸括弧」、特に「関数利用時における丸括弧の利用ルール」についてまとめました。 参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!
参考記事
- Microsoft Developer - What do you mean "cannot use parentheses?"
- 実験記録 No.02 - 【解説】VBSの「Sub プロシージャを呼び出すときに、かっこを使うことはできません」エラーの詳しい解説
- Office TANAKA - 括弧はどんなときに使うの?
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!