2007年09月10日
ネーミング統一と、引数の参照渡し
みなさん、こんばんは。昨日はプログラムを作成するときのポイントとして、
グローバル変数、プライベート変数、読み込み、書き込みを意識することを説明しました。
合わせて、ネーミングについても、簡単に触れておきます。
ネーミングとは、つまりプログラム中における、名前のつけ方です。
大切な箇所としては、関数名、変数名が、これにあたります。
例えば、グローバル変数の場合は、大文字から始めて、プライベートは、小文字で統一するなど、
関数名も、自分の使った関数の場合は、「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にご協力をお願いします。↓↓↓
投稿者 shiozumi : 23:36 | コメント (1) | トラックバック (0)
コメント
いつの間にか勉強会になっている。ためになるからきかなくてha .
投稿者 kirin : 2007年09月11日 20:19