引数を使って処理をまとめる
では、引数は具体的にはどのように使えばいいのでしょうか。たとえば円の面積を求めて表示する、といったプログラムを作ったとします。
円の面積を求める公式は「半径×半径×円周率」です。円周率を3.14とし、最初は半径5の円の面積を表示し、二回目は半径10の、三回目は半径100の円の面積を表示するようにしてみましょう。すると、以下のようなプログラムになります。
MsgBox 5 * 5 * 3.14 MsgBox 10 * 10 * 3.14 MsgBox 100 * 100 * 3.14
このプログラムでは各行に円の面積を計算する公式が組み込まれているわけです。何回も書くのは面倒ですし、一見して複雑そうに見えます。また、今は円周率を3.14で計算していますが、後でより精密な値(3.1415など)に変えたくなるかもしれません。そのときには全行を修正しなくてはなりません。
これらの問題を全て解決するために「円の面積を表示するサブルーチン」を作って呼び出すようにします。まず、サブルーチンの名前は menseki にしましょう。そして、引数に半径を与えて呼び出します。
menseki 5 menseki 10 menseki 100
サブルーチン menseki では、引数を変数 hankei で受け取って、計算し表示します。
Sub menseki( hankei ) MsgBox hankei * hankei * 3.14 End Sub
これで完成です。以前のプログラムに比べると公式を何度でも書くわけではなく、mensekiというサブルーチンを何度も呼び出すようになっています。mensekiという名前が付いていることから何をやっているのかがすぐわかります。そして、円周率を後で変えたくなってもサブルーチンの中だけ修正すればOKです。
このようにサブルーチンには処理に名前を付けプログラムをわかりやすくし、さらに後の変更に強くする効果があります。
この例では、なぜ半径だけを引数にし、円周率を引数で渡していないのでしょうか?
それは各計算(半径5のときの計算、10のときの計算)で異なるのは半径だけだからです。円周率を後で変更することがあっても、全ての行で変更することになり、各計算では同じ値で計算するでしょう。各計算で異なるのは半径だけなので、半径を引数に渡します。このように、引数は似たような処理で違う部分だけを変数化してまとめるわけです。
問題10-4:
この menseki プロシージャを使用し、10、20、30、40,50の半径を持つ円の面積を求めよう(FOR文を使用)