パラメーター配列 (Visual Basic)
通常は、プロシージャ宣言で指定されているより多くの引数を使ってプロシージャを呼び出すことはできません。不特定多数の引数が必要な場合は、パラメーター配列を宣言すると、値の配列をプロシージャのパラメーターとして渡すことができます。プロシージャを定義するときには、パラメーター配列の要素の数がわからなくてもかまいません。配列のサイズは、プロシージャの呼び出しごとに個別に決定されます。
ParamArray を宣言する
パラメーター リストでパラメーター配列を指定するには、ParamArray (Visual Basic) キーワードを使用します。次の規則が適用されます。
プロシージャはパラメーター配列を 1 つだけ定義でき、これはプロシージャの定義の最後のパラメーターである必要があります。
パラメーター配列は値渡しで渡す必要があります。プロシージャ定義で ByVal (Visual Basic) キーワードを使って明示的に指定することをお勧めします。
パラメーター配列は自動的に省略可能になります。既定値は、パラメーター配列の要素型の空の 1 次元配列です。
パラメーター配列より前には、必須のパラメーターだけを指定します。省略可能なパラメーターはパラメーター配列だけであることが必要です。
ParamArray を呼び出す
パラメーター配列を定義するプロシージャを呼び出す場合、引数は次のいずれかの方法で渡します。
なし。ParamArray (Visual Basic) 引数は省略できます。この場合は、空の配列がプロシージャに渡されます。Nothing (Visual Basic) キーワードを渡しても同じ結果になります。
コンマで区切った任意の数の引数のリスト。各引数のデータ型は、暗黙的に ParamArray 要素型に変換できる必要があります。
パラメーター配列と同じ要素型の配列
いずれの場合も、プロシージャ内のコードでは、各要素が ParamArray データ型と同じデータ型の 1 次元配列として、パラメーター配列を扱う必要があります。
セキュリティに関するメモ |
---|
無限に増大する配列を扱う場合、アプリケーション内部の容量を超過してしまう可能性があります。パラメーター配列を受け取る場合は、呼び出し元のコードが渡した配列のサイズをテストする必要があります。このサイズがアプリケーションには大きすぎる場合、適切な手順を行う必要があります。詳細については、「Visual Basic における配列」を参照してください。 |
例
次の例では、関数 calcSumを定義し、ダイヤルいます。パラメーター args の ParamArray の修飾子は可変数の引数を使用すると、関数ができます。
Module Module1
Sub Main()
' In the following function call, calcSum's local variables
' are assigned the following values: args(0) = 4, args(1) = 3,
' and so on. The displayed sum is 10.
Dim returnedValue As Double = calcSum(4, 3, 2, 1)
Console.WriteLine("Sum: " & returnedValue)
' Parameter args accepts zero or more arguments. The sum
' displayed by the following statements is 0.
returnedValue = calcSum()
Console.WriteLine("Sum: " & returnedValue)
End Sub
Public Function calcSum(ByVal ParamArray args() As Double) As Double
calcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
calcSum += args(i)
Next i
End Function
End Module
パラメーター配列を受け取るプロシージャを定義し、パラメーター配列に渡されたすべての要素の値を出力する例を次に示します。
Sub studentScores(ByVal name As String, ByVal ParamArray scores() As String)
Debug.WriteLine("Scores for " & name & ":" & vbCrLf)
' Use UBound to determine largest subscript of the array.
For i As Integer = 0 To UBound(scores, 1)
Debug.WriteLine("Score " & i & ": " & scores(i))
Next i
End Sub
Call studentScores("Anne", "10", "26", "32", "15", "22", "24", "16")
Call studentScores("Mary", "High", "Low", "Average", "High")
Dim JohnScores() As String = {"35", "Absent", "21", "30"}
Call studentScores("John", JohnScores)
参照
関連項目
概念
プロシージャのパラメーターと引数 (Visual Basic)