6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ZOZOテクノロジーズ #3Advent Calendar 2019

Day 9

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

Last updated at Posted at 2019-12-08

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 UBound(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))
6
0
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
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?