このへんで、なぜ「関数」を使うか、についてまとめておきましょう。
「関数」をあらためてコトバでまとめてみましょう。
形としては引数を取って返り値を戻すもので、プログラムの中で再利用できる処理をその形でまとめたもの、になります。
「プロシージャ」とも言います。ILE RPG ではこの呼び方です。Visual Basic なんかでもそうですね。
(「Code Complete」などでは、戻り値を返すものが「関数」で戻り値を返さないものを「プロシージャ」と言っています。RPG では戻り値は返すことも返さないこともできるわけですから、当面のところ呼び方についてはこだわる必要はないでしょう)
目的は、プログラム内のいろんなところで、またはいろんなプログラム間で、共用/再利用してそのぶん書くコードを減らし、かつ信頼性を上げる、ということになります。
実際、似たようなコードをあちこちに書くとと、いろんな問題が起きますよね。
転記ミスもあるでしょうし、処理そのものがまちがっていた時にすべて直さなくてはならない、という面倒もあります。
得てして「すべて直す」なんてことはできずに間違いが残ってしまい、それが二次災害を引き起こす、なんていったことがよく起こります。
こうしたことを避けるために、より共通化できる"機能単位(モジュール)"をくくり出して再利用を進める、というのが"モジュール化"の基本的な考えになるんです。
その"モジュール"が C や RPG では「関数」になるんですね。
いろんなところで似たような処理を使うのでまとめたい、ということもあるでしょうし、
初めからそれを見越して汎用的な部品を作っておく、ということもあるでしょう。
人間、同じような処理を何回もくりかえして書きたくない、というのはかなり自然な感情なので、C や RPG などの手続き型言語では自然と「関数」を使用するようになります。
(昔ながらの人から見ると「サブルーチンと何が違うのか」という疑問があるかもしれませんね?
他のプログラムからも使える、というのと、戻り値を判別するように書いておけば文の中で使える、というのが大きな違いです。
生産性にはこの二つ、とても効いてくるんですよ)
モジュール化の目的は、そうしたメインテナンスのしやすさ、だけではありません。
言わば実績のあるモジュールを使いまわすことで、その部分についてはバグの心配が少なくなる、ということが言えます。
今まで誰かが使って問題なかった、あったとしてもその問題は直している、というのがもちろん前提にはなりますが、
共有度合いが増えれば増えるほど、共有して使用している期間が長くなればなるほど、そのモジュールの信頼性は上がります。
そのモジュールは、できあがるプログラムの部分になるわけです。
その部分の信頼性が上がるわけですから、共有された実績のある部分が増えれば、それだけそのプログラムの信頼できる部分が増える、というわけですね。
つまり、「関数」を使う目的はそのまま"モジュール化"の考えを理解することと、それを実行することになるんですね。
"モジュール化"というのはとても奥深い話なので、ここでは語りきれるものではありません。
ぜひ、「The Art of Unix Programming」(以前もふれた本です)の「第4章 モジュール化」や、「プログラム書法」の「4. プログラム構造」などを見てみて、より理解を深めてみてください。
この記事にはトラックバック・コメントがありません。
コメントは投稿者の責任においてなされるものであり,サイト管理者は責任を負いません。