|
▼さくらんぼ さん:
おはようございます。
>みなさま、本当にどうもありがとうございました。
>おかげさまで、できるようになりました。
>
>
>>ちなみに、Callで呼び出す場合において、グローバル変数で値を渡す方法は
>>私はあまり推奨しません。
> ↑
>最後に、なぜ推奨できないのか教えていただければ嬉しいです。
私も「グローバル変数で値を渡す方法」は推奨しません。
それは、コードをトレース(特に他人の書いたコードを読むと実感します)する場合、
「パラメータ渡しの方法」がわかりやすい手続きですし
(どの変数が引数として使われているかということがわかりやすい)、
又、何らかの原因でコードの修正を求められた時に「グローバル変数で値を渡す方法」よりも「パラメータ渡しの方法」がよりミスの少ない修正が可能だと思うからです。
VBAでは、プロシジャー間のパラメータ渡しが可能になっていますが、
他言語で、これが出来ない仕様の言語を経験したことがあります。
泣く泣くグローバル変数渡しを使うのですが、この場合は、コメントも詳細に記述しなければなりませんでした。
Sub main()
A=3
B=5
Call tashizan()
Msgbox C
End sub
別の標準モジュール
Public A as long
Public B as long
Public C as long
‘====================================================
Sub tashizan()
C=A+B
End sub
この例でもtashizanというプロシジャーに対して、
A,B,Cが引数であるというコメントがないと
時間が経てばわからなくなってしまうと思いませんか?
また、この場合、引数としての変数名はA,B,Cと固定の手続きになってしまい、
コードの柔軟性という観点からも「パラメータ渡しの方法」が望ましいと思います。
Sub main()
Dim myvalue1 as long
Dim myvalue2 as long
Dim ans as long
Myvalue1=3
Myvalue2=5
Call tashizan(Myvalue1,Myvalue2,ans)
Msgbox ans
End sub
別の標準モジュール
‘====================================================
Sub tashizan(Hensu1 as long ,Hensu2 as long,Kotae as long)
Kotae = Hensu1+ Hensu2
End sub
というようにパラメータ渡しの方が「引数の行方が明確になっている手続き」だと思います。
コードが複雑になったものであれば、
この違いがメンテナンスを行うにあたって大きいと思いますよ。
一昔前のプログラマだった(今は違いますが)私の世代では、
「マイヤーズの複合設計法」という手法をとおしてこういう事は
学んだ記憶があります(当時は結構有名だったと思います)。
まっ、買うことはないと思いますが、図書館などで見つけたなら一読してみては?
|
|