VBNET2003 XPProで聞きます。
Private function XXX() as integer
…
end function
で戻り値は普通一つですが、二つ以上を戻す方法はありますか?
普通な方法しか浮かびませんでした
・値型な引数を参照渡しする
(クラス型なら別に悩む必要はありませんよね)
・戻り値を構造体やクラスにする
などでしょうか?
構造体?ですか
配列のことでしょうか??
質問の意味がわかるように具体的にソース書きます。
private function calc(byval num as integer) as integer
dim bai as integer
dim jijyou as integer
bai = num * 2
jijyou = num ^ 2
calc = bai
end function
これではbaiの値しかかえってきませんね
jijyou の値も返したいのですが。。。。
Option Explicitで変数jijyouを宣言して使えば済むのではないかと思ったり思わなかったり
> > ・値型な引数を参照渡しする
これは、
private sub compute(byval num as integer,byref ret_bai as integer,byref ret_jijyou as integer)
ret_bai=num*2
ret_jujyou=num*num
end sub
(.netはよーわかりませんが)などとなります
> > 戻り値を構造体やクラスにする
> 構造体?ですか
> 配列のことでしょうか??
とりあえず、ヘルプに書いていますのでヘルプを見てください(ローカル上のでもネット上のでもかまいません)
通ってみたさんへ
> Option Explicitで変数jijyouを宣言して使えば済むのではないかと思ったり思わなかったり
ww
無闇にスコープを広げるといふことでしょうか?
なるべくなら処理を構造化して内部で完結させたいので、最近はそういう発想がなくなりまs(ry
失礼します
いいか、悪いかは別にして下記のような方法もあります。
Private Function calc(ByVal num As Integer) As Variant
Dim ret(2) As Variant
ret(0) = num * 2
ret(1) = num ^ 2
ret(2) = num + 2
calc = ret
End Function
Private Sub Command1_Click()
Dim A As Variant
A = calc(3)
Debug.Print A(0), A(1), A(2)
End Sub
VBでは返り値の数は0(Sub)または1つ(Function)と決まっていて多値の返り値が存在しないので
・同時に複数個のデータを持つことの出来るデータ構造を使用する
(配列、構造体、クラス等)
・一部の引数をByRefにして結果受取に使う
のどちらかで実装します。
お世話になります。
2 通りの方法が考えました。
Byref による引数の追加は、仕様変更があった時に煩雑になるので、
私は個人的にはあまり好きじゃないです...。
'1 番目の方法(配列使用、Enum でどこの位置に何が入っているのかを示す)
Private Enum Kind As Integer
Bai = 0
Jijyou = 1
End Enum
Private Function calc(ByVal num As Integer) As Double()
Dim returnArray(2) As Double
returnArray(Kind.Bai) = num * 2
returnArray(Kind.Jijyou) = num ^ 2
Return returnArray
End Function
'2 番目の方法(特別なオブジェクトとか構造体を作成する)
Public Class Kekka
Public Bai As Integer
Public Jijyou As Decimal
End Class
Private Function calc2(ByVal num As Integer) As Kekka
Dim k As Kekka = New Kekka
k.Bai = num * 2
k.Jijyou = num ^ 2
Return k
End Function
なるほど。構造体とは なおこさんみたいにk.(変数)ってやり方法ですね。よくわかりました。
ありがとうございます。
ツイート | ![]() |