したがってプログラムの正解は一つではありません。いくつもあります。
でも効率的な書き方や、メンテナンスしやすい書き方というものはあります。
また、ユーザー定義関数の中で、さらに別のユーザー定義関数を呼び出すことで、前に作成したプログラムを有効に活用することもできます。
そこで今回は、同じ結果を出すプログラムでも、いろんな書き方ができることを学んでください。
オリジナルのユーザー定義関数を、さらに改良してみましょう。
(1)まず、これまでの基本となる calcGankin() というユーザー定義関数があります。
・calcGankin()
このユーザー定義関数は、欲しい利息と利率(年率)から、必要な元金を逆算するためのものです。
・使用例
=calcGankin(1000,0.5)
(2)次に calcGankin() を改良して、calcGankinF()というユーザー定義関数を作成しました。
・calcGankinF()
関数の使い方は同じです。
・使用例
=calcGankinF(1000,0.5)
このユーザー定義関数は、計算結果を「桁区切り」する書式を加えたり、円表示を加えています。
ここでのポイントは、元金の計算式をそのまま残していることです。
つまり同じ計算式が、calcGankin() と calcGankinF() の両方にあります。
それぞれに計算式があるメリットは、異なる式に変えやすいことです。
逆に言うと、計算式を変えたい場合や、式が間違っていた場合には、両方修正しなければならないデメリットがあります。
(3)そこで calcGankin() の計算式を利用しつつ、元金の書式を加えた、calcGankinF2()というユーザー定義関数を作成しましょう。
これまでのユーザー定義関数の下に新しく作成して、動作確認してみてください。
・calcGankinF2()
Public Function calcGankinF2(risoku As Long, kinri As Single) As String
Dim gankin As Currency
gankin = calcGankin(risoku, kinri)
calcGankinF2 = Format(gankin, "##,##0") & "円"
End Function
計算結果は calcGankinF() とまったく同じになるはずです。
・使用例
=calcGankinF2(1000,0.5)
でも calcGankinF2() には、計算式がありませんよね。計算式の変わりに、別のユーザー定義関数を呼び出して使っています。
gankin = calcGankin(risoku, kinri)
このようにユーザー定義関数の中では、別のユーザー定義関数を呼び出して使うことができます。もちろん既存の関数も使えます。
別のユーザー定義関数を呼び出すことで、プログラムの処理を分割したり、プログラムの再活用が可能になります。
もし計算式が変更になった時でも、calcGankin() 側の修正だけで済みます。
また、calcGankinF2()が呼び出された時に受け取った引数を、そのままcalcGankin()を呼び出す時の引数として使っている点にも注目してください。
このような書き方はよく使われるので、覚えておくと便利です。
(4)もっとシンプルにしたのが、calcGankinF3() です。これも作成して、動作確認してみてください。
・calcGankinF3()
Public Function calcGankinF3(risoku As Long, kinri As Single) As String
calcGankinF3 = Format(calcGankin(risoku, kinri), "##,##0") & "円"
End Function
・使用例
=calcGankinF3(1000,0.5)
出力結果は同じですが、プログラムがたった1行になりました。
でも関数が入れ子の状態なので、少しわかり難いですよね。そんな時は「置き換え」で考えます。
*入れ子 ここでは関数の中に関数がある状態
calcGankinF3 = Format(calcGankin(risoku, kinri), "##,##0") & "円"
↓
calcGankinF3 = Format(calcGankin(1000, 0.5), "##,##0") & "円"
↓
calcGankinF3 = Format(250000, "##,##0") & "円"
↓
calcGankinF3 = "250,000" & "円"
↓
calcGankinF3 = "250,000円"
このように引数の値や、関数の戻り値を、実際の値に置き換えてイメージすると、わかりやすいです。これがプログラムを読む時のコツです。
【解説】
今回はユーザー定義関数の応用編として、少し変わった書き方を学びました。
同じ結果を得るプログラムでも「いろんな書き方ができるんだなぁ」という感じを掴んでいただけたら幸いです。
プログラミングの正解は一つではないことが、何となくわかったのではないでしょうか。
また、今回ぜひ押さえおいて欲しいポイントは、以下の3つです。
・ユーザー定義関数の中で、さらに別のユーザー定義関数が呼び出せる。
・別のユーザー定義関数を呼び出すことで、プログラムを分割したり、処理を再活用できる。
・受け取った値を、さらに別の関数を呼び出す時の引数にできる。
プログラミングとは、既存の関数やオリジナルのユーザー定義関数を組み合わせて、実現したい処理を組み立てていく作業なのです。
ちなみにJava言語などのオブジェクト指向型言語では、「継承」という便利な仕組みがあるので、プログラムの再利用が、もっと効率的にできます。