ID : 565
配列をプロシージャの引数にする
プロシージャの引数に配列を指定することができます。
下記の例1の"SJoin"プロシージャは要素数3の配列(ccc(2))を要求しています。Mainプロシージャから呼び出しているPrintDbg SJoin(aaa, "-")
では要素数3で定義した配列aaaを引数として渡しています。
例1
Sub Main
Dim aaa(2) As String
aaa(0) = "Tom"
aaa(1) = "Jessica"
aaa(2) = "George"
PrintDbg SJoin(aaa, "-")
End Sub
Function SJoin(ByVal ccc(2) As String, ByVal Separator As String) As String
Dim ddd As String
ddd = ""
SJoin = ccc(0) & Separator & ccc(1) & Separator & ccc(2)
End Function
要素未定の配列
プロシージャの引数には要素未定の配列を指定することができます。
Function AAA(ByVal aaa() As Integer) As String
上記例の引数"aaa()"は整数型の配列で要素数と次元数は未定です。渡された引数の要素数に応じた処理を記述します。
下記の例の"RateB"プロシージャは要素数未定の"bbb()"配列変数を要求しています。"Main"プロシージャでは"RateB"プロシージャを読み出すときに"aaa(1000)"を渡しています。
'!TITLE "配列内にあるnの倍数の数の割合を表示"
Sub Main
Dim aaa(1000) As integer
Dim n As Integer
For n = LBound(aaa) To UBound(aaa)
aaa(n) = 7 * (n + 1)
Next
PrintDbg RateB(aaa, 3) * 100 & "%"
End Sub
Function RateB(ByVal bbb() as Integer, ByVal k As Integer) As Single
Dim n As Integer
Dim m As Integer
m = 0
For n = LBound(bbb) To UBound(bbb)
If bbb(n) Mod k = 0 Then
m = m + 1
End If
Next
RateB = m / (Ubound(bbb) - Lbound(bbb) + 1)
End Function
プロシージャの引数のまとめ
プロシージャの引数には同じ型のデータを代入しなければなりません。同じ型のデータを代入するか、もしくはデータ型の自動変換(キャスト)可能なデータを指定しなければなりません。
配列は自動変換されませんので同じデータ型を渡さなければなりません。
|
呼び出し元 | ||||
---|---|---|---|---|---|
配列 | 配列でない | ||||
要素確定 | 要素未定 | ||||
呼び出し先 | 配列 | 要素確定 | 要素数、次元数が同じときのみOK | NG | NG |
要素未定 | OK | OK | NG | ||
配列でない | NG | NG | OK |
- RC8シリーズロボットコントローラVer. 1.3.7未満ではStatic属性の2次元配列以上をプロシージャの引数に指定できません。
- Dim宣言では要素未定の配列は定義できません。
ID : 565