Private function で二つ以上の戻り値を返すには?

解決


とみぃだ  2006-04-16 06:04:24  No: 130987

VBNET2003  XPProで聞きます。
Private function XXX() as integer

end function

で戻り値は普通一つですが、二つ以上を戻す方法はありますか?


ガッ  2006-04-16 06:26:49  No: 130988

普通な方法しか浮かびませんでした
・値型な引数を参照渡しする
  (クラス型なら別に悩む必要はありませんよね)
・戻り値を構造体やクラスにする

などでしょうか?


とみぃだ  2006-04-16 06:57:52  No: 130989

構造体?ですか
配列のことでしょうか??

質問の意味がわかるように具体的にソース書きます。

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  の値も返したいのですが。。。。


通ってみた  2006-04-16 07:31:29  No: 130990

Option Explicitで変数jijyouを宣言して使えば済むのではないかと思ったり思わなかったり


ガッ  2006-04-16 07:42:36  No: 130991

> > ・値型な引数を参照渡しする
これは、
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

失礼します


おせっかい  2006-04-17 08:23:23  No: 130992

いいか、悪いかは別にして下記のような方法もあります。

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


ひろ  2006-04-17 20:05:01  No: 130993

VBでは返り値の数は0(Sub)または1つ(Function)と決まっていて多値の返り値が存在しないので

・同時に複数個のデータを持つことの出来るデータ構造を使用する
  (配列、構造体、クラス等)
・一部の引数をByRefにして結果受取に使う

のどちらかで実装します。


なおこ(・∀・)  2006-04-17 21:07:20  No: 130994

お世話になります。

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


とみぃだ  2006-04-19 07:34:07  No: 130995

なるほど。構造体とは  なおこさんみたいにk.(変数)ってやり方法ですね。よくわかりました。
ありがとうございます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加