メソッドについて


 2009-06-29 10:13:53  No: 146033  IP: 192.*.*.*

メソッドでsubとFunctionの2つのステートメントがあり、違いは
戻り値をもつかどうかということですが、

どちらのステートメントでも書けるプログラムが多いような気が
しています。
どうしてもFunction、戻り値をもつステートメントを使わなければ
ならないといったケースはあるのでしょうか・

VB2008  6か月

編集 削除
魔界の仮面弁士  2009-06-29 11:29:00  No: 146034  IP: 192.*.*.*

> どちらのステートメントでも書けるプログラムが多いような気がしています。
通常は、自分にとって都合のよい方を利用すれば OK です。


> どうしてもFunction、戻り値をもつステートメントを使わなければ
> ならないといったケースはあるのでしょうか・
あります。たとえばラムダ式が要求されるような場所には、
AddressOf で Function プロシージャを指定することができますが、
AddressOf で Sub プロシージャを指定することはできません。

また、イベント応答のためのプロシージャの場合はその逆で、
Function は使用できず、常に Sub として定義する必要があります。



Private Sub Button1_Click() Handles Button1.Click
  Dim X() As Integer = {11, 22, 33, 44, 55}

  Dim 偶数() As Integer

  'これはOK
  偶数 = Array.FindAll(X, Function(n) n Mod 2 = 0)

  'これもOK
  偶数 = Array.FindAll(X, AddressOf Test1)

  'これはNG。第二引数は「Function Foo(n As Integer) As Boolean」の形でなければならない。
  '偶数 = Array.FindAll(X, AddressOf Test2)
End Sub

Private Function Test1(ByVal n As Integer) As Boolean
  Return n Mod 2 = 0
End Function

Private Sub Test2(ByVal n As Integer)
  Return
End Sub

編集 削除
 2009-06-30 15:25:23  No: 146035  IP: 192.*.*.*

魔界の仮面弁士 さん、感謝、感謝です。m(_ _)m

編集 削除