呼び出し可能なコード(ルーチン)は、Sub(副作用/それが行うことのために呼び出される)またはFunction(その戻り値のために呼び出される)または両方の混合物である可能性があります。MsgBoxのドキュメントとして
ダイアログボックスにメッセージを表示し、ユーザーがボタンをクリックするのを待ち、ユーザーがクリックしたボタンを示す値を返します。
MsgBox(プロンプト[、ボタン] [、タイトル] [、ヘルプファイル、コンテキスト])
示す、このルーチンは第3の種類です。
VBScriptの構文規則は単純です。
(ルーチンとしての)関数を呼び出すときにパラメータリスト()を使用する
ユーザーにメッセージを表示したいが、ユーザーの応答を知る必要がある場合:
Dim MyVar
MyVar = MsgBox ("Hello World!", 65, "MsgBox Example")
' MyVar contains either 1 or 2, depending on which button is clicked.
(ルーチンとしての)Subを呼び出すときにパラメータlist()を使用しないでください
ユーザーにメッセージを表示したいが、応答に興味がない場合:
MsgBox "Hello World!", 65, "MsgBox Example"
この美しいシンプルさは、次のように台無しにされています。
パラメータリストに()を使用し、値による呼び出しのセマンティクスを強制することの設計上の欠陥
>> Sub S(n) : n = n + 1 : End Sub
>> n = 1
>> S n
>> WScript.Echo n
>> S (n)
>> WScript.Echo n
>>
2
2
S(n)は、「Sをnで呼び出す」という意味ではなく、「Sをnの値のコピーで呼び出す」という意味です。それを見ているプログラマー
>> s = "value"
>> MsgBox(s)
彼らが試みるとき、「作品」は驚きに満ちています:
>> MsgBox(s, 65, "MsgBox Example")
>>
Error Number: 1044
Error Description: Cannot use parentheses when calling a Sub
Sub呼び出しのempty()に関するコンパイラーの寛大さ。「純粋な」サブランダム化(ランダムシードを設定することの副作用のために呼び出される)は、次のように呼び出すことができます。
Randomize()
()は「戻り値を教えてください」も「値で何かを渡す」ことも意味しませんが、ここでもう少し厳密にすると、プログラム作成者は
Randomize n
と
Randomize (n)
サブ呼び出しでパラメーターlist()を許可するCallステートメント:
s = "value" Call MsgBox(s、65、 "MsgBox Example")
これは、プログラマーが考えずに()を使用することをさらに奨励します。
(「かっこが使えない」とはどういう意味ですか?)