Functionプロシージャーを使おう

大きなプログラムをコーディングするときは、関数を多用する必要が出てきます。
ここでは、値の受け渡しが出来るようFunctionプロシージャーを勉強しましょう。
最初にByVal、ByRefを勉強してそれからFunctionプロシージャーに入ります。


■ この章で学ぶこと

TOPに戻る

Byvalを使おう

次のコードを実行してみましょう。関数が2つあるので注意してください。

Sub Main()
 
 Dim a As Integer
 a = 1
 Dim i As Integer
 
 For i = 0 To 5
  Call Message1(a)
  MsgBox a
 Next
 
End Sub
--------------------------------------------------------------------
Private Sub Message1(ByVal b As Integer)
 
 b = b + 1
 MsgBox b
 
End Sub

  1. Call Message1
    上のコードサンプルは2つの関数から構成されていることがお分かりになると思います。
    @Main関数、A関数1という名前ですが、@Main関数を実行中に関数1を実行させるとき
    Callを使用します。条件によってはCallを使用しなくてもよい場合がありますが、
    すべてCallをつけておけば安心なのでとりあえず付けておきましょう。 

  2. Call Message1(a)
    Callに関しては上で説明しましたが、その後ろに怪しげなaが付いています。これは
    引数と呼ばれるもので関数Message1にaという変数を渡すという意味です。

  3. Message1(Byval b As Integer)
    いつもはMessage1()で終わるところですが、なにやら奇妙な変数が定義されています。
    勘のいいかたはお気づきかもしれませんが、先ほどMessage1関数で渡そうとしていたaという
    変数を受け取りますよ、その受け取った変数をここではbとして使いますよ、という意味です。
    Message1関数で変数3を渡してきたらbに3を代入してメッセージボックスで4を表示する関数
    ということになります。


ちょっとややこしいですが、この辺をクリアしないと初級にはなれません。頑張りましょう。

「Functionプロシージャーを使おう」最初に戻る

Byrefを使おう

下のコードを実行してみてください。先ほどとは少し結果が違ってくると思います。

Sub Main()
 
 Dim a As Integer
 a = 1
 Dim i As Integer
 
 For i = 0 To 5
  Call Message2(a)
  MsgBox a
 Next
 
End Sub
--------------------------------------------------------------------

Private Sub Message2(ByRef b As Integer)
 
 b = b + 1
 MsgBox b
 
End Sub

先ほどとの違いはMessage2(ByRef b As Integer)の部分がByValByRefになっただけです。
意外と参考書等には記載されていませんがとても重要です(とわたしも会社の方から教えてもらいました)。
違いは、ByValが値渡しにたいしてByRefが参照渡しという違いがあります、と大抵の参考書には書いてあります。
先ほどの結果はMessage関数がaの値に影響を与えませんでしたが、今回はaの値ごと変更していることが
わかります。

うまく説明できませんが、サンプル関数の結果をよく考えて理解してください。



「Functionプロシージャーを使おう」最初に戻る



Functionプロシージャーを使おう

下のコードを実行してみてください。

Sub Main()

 Dim i As Integer
 
  For i = 1 To 5
   MsgBox Message(i)
  Next

End Sub
--------------------------------------------------------------------

 Function Message(ByVal a As Integer) As String

  If a > 3 Then
   Message = "引数は3より大きいです"
  ElseIf a = 3 Then
   Message = "引数は3です"
  Else
   Message = "引数は3よりちいさいです"
  End If

 End Function
  1. Msgbox Message(i)
    Msgboxはメッセージを表示させるものですが、メッセージ内容はMessage(i)
    ということまではわかってもらえると思います。 

  2. Function Message(Byval a As Integer) As String
    Message関数でInteger型の引数を入れることによって、処理をしてString型の
    値を返します。ここでは、引数の値が3より大きい、小さい、同じかによって
    Messageにコメントを代入して返します。

  3. Message = "3よりおおきいです"
    Message関数に値を代入しています。String型にしているのはこのためです。

これだけでは、説明不足かも知れませんが活用できるようになりましょう。



「Functionプロシージャーを使おう」最初に戻る




// このWebサイトのご意見・ご感想はvb@tentant.comまで //

Copyright (C) 2004 visualbasic.tentant.com.All righs reserved