パラメーター配列 (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)

参照

関連項目

Optional (Visual Basic)

UBound

概念

Visual Basic におけるプロシージャ

プロシージャのパラメーターと引数 (Visual Basic)

引数の値渡しと参照渡し (Visual Basic)

位置と名前による引数渡し (Visual Basic)

省略可能なパラメーター (Visual Basic)

プロシージャのオーバーロード (Visual Basic)

その他の技術情報

Visual Basic における配列