学習内容とねらい
この章では、関数について学習します。
特定の処理を行うコードの集まりを関数と呼びます。だらだらと長いプログラムはわかりにくいだけでなく、不具合が発生したときにも、それがどこで発生したのかを見つけにくくなります。プログラムが長くなってきたら、できるだけ処理のまとまりを関数にして、すっきりとしたコードを書くことができます。
Delphiプログラミングのテキストのこの章では、『
モジュール』という言葉がよく使われていますが、この言葉はあまりメジャーに使われません。
C++Builderの参考書を見てもわかりますが、『
モジュール』という用語は扱われていません。
C++Builderのプログラムは関数のかたまりであると理解しておいてもいいと思います。しかし、間違っては使われていないので、本テキストでも扱います。
関数の必要性
関数をどんなときに使うのかピンとこないかもしれません。
Buttonコンポーネントをクリックしたときの処理は、全部そのイベントハンドラに書けばいいじゃないか、という気がします。
下記のプログラムは、
Button1をクリックしたときのイベントハンドラを表しています。そして、1つの処理を『
モジュール』といいます。
変数の宣言から始まって、処理内容は大きく3つに分けられます。確かにここに全ての処理を書いても間違いではありません。しかし、これが本当に
C++Builderのコードで書かれていて、しかも、とても長いプログラムだったら・・・。
Button1の
OnClickイベントでどんな処理が行われているのか、プログラムをじっくり読まなければわかりません。
図5-1
下記のプログラムは並べ替えの部分を関数にして独立させたものです。こうすると、並べ替えの処理の部分が、その関数を呼び出す命令文の1行だけですみます。そこにコメントを書いておけば、イベントハンドラの処理の内容が、ひと目でわかります。
図5-2
関数を使うメリットは、コードを読みやすくするだけではありません。
図5-1のように、並べ替えの処理を
Button1のイベントハンドラに記述すると、そこで並び替えの処理はできません。もし、
Button2をクリックしたときにも同じ並べ替えを実行したい場合は、
Button2の
OnClickイベントにも同じコードを記述しなければなりません。つまり、またっく同じコードが重複して、あちこちに存在することになってしまいます。
同じコードがプログラムのあちこちに存在すると、不具合があったときに、それを直すのが大変です。一方は直したけれど、他の部分で直していなかったという勘違いにもつながります。
図5-2のように、重複する部分を関数にしておくと、修正はその部分だけですみます。もちろん、
Button2からも、この関数を実行できます。
値を関数と返さない関数
C++Builderの関数には「
値を返す関数」と「
返さない関数」の2種類があります。例えば、
Dateという関数は、システムの現在の日時を調べて、その結果を返します。
しかし、
ShowMessageという関数は、指定した文字列をダイアログボックスに表示する処理を行いますが、処理の結果として返す値は何もありません。また、
Delphiでは「
値を返すもの」を「関数」と呼び、
「値を返さないもの」を「手続き」と呼びます。しかし、
C++Builderではどちらも、総称して「
関数」と呼びます。これも2つの言語の違いとなります。
これから、自分で作る関数も同じなので、処理の結果を返すように作成するか、返す必要がないのか、良く考えて作成しましょう。