Help us understand the problem. What is going on with this article?

VBScriptで可変個引数の関数を作る方法

More than 1 year has passed since last update.

VBでは関数宣言の引数の前にOptionalをつけることによって、その引数を省略可能にすることが出来ますが、VBScriptにはその機能が実装されていません。

Optional Parameters (Visual Basic)

VBScriptでこれと同等なことをしようとした場合は、例えば関数を呼び出すときに後半の引数を Null にするなどして対応します。

Function Func(hoge, fuga, piyo)
  If piyo = Null
    piyo = "default value"
  End If

  ' Body
End Function

Call Func(hoge, fuga, Null)

しかし、この方法ですと引数を省略するための Null なのか、それとも Null という値を関数の引数にしたいのかが曖昧です。

解決策

Array関数を使う。
Array関数

Array関数はVBscriptの組み込み関数の中でも特殊な関数で、可変個の引数を渡すことが出来ます。
そのため、Array関数を上手く使うことによって、関数を呼び出す側の引数リストに Null を書かなくても良いようになります。

しかし、関数定義がかなりキモい感じになる上に、関数シグニチャから引数に関する情報を得ることができなくなってしまします。

メリットとデメリットを比較するとあまり積極的に使いたくはないですが、もしものときのテクニックとしてご参考までに。

Function Func(arrArgs)
  Dim hoge, fuga, piyo
  piyo = "default value"

  Select Case UBount(arrArgs)
    Case 1
      hoge = arrArgs(0)
      fuga = arrArgs(1)
    Case 2
      hoge = arrArgs(0)
      fuga = arrArgs(1)
      piyo = arrArgs(2)
    Case Else
      ' エラー処理
      Exit Function
  End Select

  ' Body
End Function

Call Func(Array(hoge, fuga))
zozotech
70億人のファッションを技術の力で変えていく
https://tech.zozo.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away