カタツムリ2007年09月10日

ネーミング統一と、引数の参照渡し

user_20070911a.jpg

みなさん、こんばんは。昨日はプログラムを作成するときのポイントとして、

グローバル変数、プライベート変数、読み込み、書き込みを意識することを説明しました。

合わせて、ネーミングについても、簡単に触れておきます。

ネーミングとは、つまりプログラム中における、名前のつけ方です。

大切な箇所としては、関数名、変数名が、これにあたります。

例えば、グローバル変数の場合は、大文字から始めて、プライベートは、小文字で統一するなど、

関数名も、自分の使った関数の場合は、「my」や「usr」を必ず先頭につけるなど、

特に決まったルールがあるわけではありませんが、全体を通して統一することが大切です。

またコメントのつけ方なども、統一してみると、さらにプログラムが見やすくなります。

これからのことを、「コーディング規約」と呼んでいますが、これからプログラムを始める人は、しっかり身につけて下さいね。

では、さっそく、グローバルな変数には、GL_ をつけて、自分の使った関数には、my_ を先頭に付け加えてみます。

Public GL_file_1 As String '① グローバルな変数

'------------------------------------------------------------------------
' 引数:なし
' 戻値:なし
'------------------------------------------------------------------------
Sub main()

GL_file_1 = "グローバルなファイルです。" '①+④
my_prg_a '自分で作成した関数
my_prg_b '自分で作成した関数
MsgBox GL_file '予め用意されている関数

End Sub

'------------------------------------------------------------------------
' 引数:なし
' 戻値:なし
'------------------------------------------------------------------------
Sub my_prg_a()
GL_file_1 = GL_file_1 + "Aさんが変更しました。" '①+③+④
End Sub

'------------------------------------------------------------------------
' 引数:なし
' 戻値:なし
'------------------------------------------------------------------------
Sub my_prg_b()

Dim i As Integer '② プライベートな変数

For i = 1 To 3 '// ②+③+④
GL_file_1 = GL_file_1 + "Bさんも" + CStr(i) + "回、変更しました。" '①+③+④
Next i

End Sub


ではここで、昨日の回答を紹介します。

※ファイルをダウンロードして実行できます。※EXCEL のVBA を実行して下さい。

GL_file_1 から、GL_file_2 に変更しても、関数、my_prg_a と my_prg_b を変更しないための修正は、下記のようになります。

'------------------------------------------------------------------------
' 関数:メイン関数
'------------------------------------------------------------------------
Public GL_file_1 As String '① グローバルな変数

Sub main()

GL_file_1 = "グローバルなファイルです。" '①+④
my_prg_a GL_file_1 '自分で作成した関数A
my_prg_b GL_file_1 '自分で作成した関数B
MsgBox GL_file '予め用意されている関数

End Sub

'------------------------------------------------------------------------
' 引数:file
' 戻値:なし
'------------------------------------------------------------------------
Sub my_prg_a( ByRef file as String )
file = file + "Aさんが変更しました。" '①+③+④
End Sub

'------------------------------------------------------------------------
' 引数:file
' 戻値:なし
'------------------------------------------------------------------------
Sub my_prg_b( ByRef file as String )

Dim i As Integer '② プライベートな変数
For i = 1 To 3 '// ②+③+④
file = file + "Bさんも" + CStr(i) + "回、変更しました。" '①+③+④
Next i
End Sub


まず、my_prg_a のあとに、GL_file_1 が追加されていますが、

これは、「引数」といって、my_prg_a のプログラムの中で、変更できるようになります。

また、my_prg_a では、file という変数で、受け取っています。

★ Sub my_prg_a( ByRef file as String )

そして実際のプログラムでは、

★ file = file + "Aさんが変更しました。"

file に追加することで、GL_file_1 に追加することが可能になります。

つまりこれによって、my_prg_a の引数に指定された変数を、変更できるようになります。

その結果、my_prg_a は、汎用性を持つことができます。使いまわしが可能になるのです。

例えば、

GL_file_1 = "あいうえお="

GL_file_2 = "かきくけこ="

my_prg_a GL_file_1

my_prg_a GL_file_2

これで、

GL_file_1 は、"あいうえお=Aさんが変更しました。"

GL_file_2 は、"かきくけこ=Aさんが変更しました。"

となります。

この応用は、多くの場面で使えます。とても重要な基本テクニックです。

こうやって、プログラムの汎用性を追求していくと、応用力が高まります。

また補足しますと、ByRef というキーワードがありますが、これを、ByVal に変更すると、GL_file_1 は、変更されません。

これは、ByRef「参照渡し」といい、ByVal は「値渡し」と言って、動作が全く違います。

ByVal の場合は、GL_file_1 の中身がコピーされて、my_prg_a に渡されます。

つまりコピーされたものを変更するので、元は変わりません。

ByVal の場合は、元が渡されます。つまり、my_prg_a から参照できるのです。

よって変更すれば、GL_file_1 が変わるのです。

詳細な説明は、こちらを参考にして下さい。

また、みなさんも、自分なりに、このプログラムを変更して、実行して下さい。

プログラムの動作を確認するには、まずステップ実行(トレース)して見ましょう!

動作がしっかり理解できると思います。


ツイッターはじめました~フォロー待ってま~す!!
↓↓↓下記の3つのバナーをクリックして下さい。ランキングUPにご協力をお願いします。↓↓↓

にほんブログ村 経営ブログへランキングUP!

ランキングUP!

banner2.gif 人気blogランキング!

投稿者 shiozumi : 23:36 | コメント (1) | トラックバック (0)

このエントリーのトラックバックURL

http://blog.e-smile.ne.jp/cgi-bin/mt/mt-tb.cgi/50

コメント

いつの間にか勉強会になっている。ためになるからきかなくてha .

投稿者 kirin : 2007年09月11日 20:19