2010年9月10日(金) 08:29 JST

HOME > i am BEST > 「関数」と "モジュール化"

「関数」と "モジュール化"

  • 2010年6月15日(火) 05:51 JST
  • 投稿者:
    hidehi

このへんで、なぜ「関数」を使うか、についてまとめておきましょう。



「関数」をあらためてコトバでまとめてみましょう。

形としては引数を取って返り値を戻すもので、プログラムの中で再利用できる処理をその形でまとめたもの、になります。
「プロシージャ」とも言います。ILE RPG ではこの呼び方です。Visual Basic なんかでもそうですね。
(「Code Complete」などでは、戻り値を返すものが「関数」で戻り値を返さないものを「プロシージャ」と言っています。RPG では戻り値は返すことも返さないこともできるわけですから、当面のところ呼び方についてはこだわる必要はないでしょう)
目的は、プログラム内のいろんなところで、またはいろんなプログラム間で、共用/再利用してそのぶん書くコードを減らし、かつ信頼性を上げる、ということになります。

実際、似たようなコードをあちこちに書くとと、いろんな問題が起きますよね。
転記ミスもあるでしょうし、処理そのものがまちがっていた時にすべて直さなくてはならない、という面倒もあります。
得てして「すべて直す」なんてことはできずに間違いが残ってしまい、それが二次災害を引き起こす、なんていったことがよく起こります。
こうしたことを避けるために、より共通化できる"機能単位(モジュール)"をくくり出して再利用を進める、というのが"モジュール化"の基本的な考えになるんです。
その"モジュール"が C や RPG では「関数」になるんですね。

いろんなところで似たような処理を使うのでまとめたい、ということもあるでしょうし、
初めからそれを見越して汎用的な部品を作っておく、ということもあるでしょう。
人間、同じような処理を何回もくりかえして書きたくない、というのはかなり自然な感情なので、C や RPG などの手続き型言語では自然と「関数」を使用するようになります。
(昔ながらの人から見ると「サブルーチンと何が違うのか」という疑問があるかもしれませんね?
他のプログラムからも使える、というのと、戻り値を判別するように書いておけば文の中で使える、というのが大きな違いです。
生産性にはこの二つ、とても効いてくるんですよ)

モジュール化の目的は、そうしたメインテナンスのしやすさ、だけではありません。

言わば実績のあるモジュールを使いまわすことで、その部分についてはバグの心配が少なくなる、ということが言えます。
今まで誰かが使って問題なかった、あったとしてもその問題は直している、というのがもちろん前提にはなりますが、
共有度合いが増えれば増えるほど、共有して使用している期間が長くなればなるほど、そのモジュールの信頼性は上がります。
そのモジュールは、できあがるプログラムの部分になるわけです。
その部分の信頼性が上がるわけですから、共有された実績のある部分が増えれば、それだけそのプログラムの信頼できる部分が増える、というわけですね。


つまり、「関数」を使う目的はそのまま"モジュール化"の考えを理解することと、それを実行することになるんですね。

"モジュール化"というのはとても奥深い話なので、ここでは語りきれるものではありません。
ぜひ、「The Art of Unix Programming」(以前もふれた本です)の「第4章 モジュール化」や、「プログラム書法」の「4. プログラム構造」などを見てみて、より理解を深めてみてください。

トラックバック

このエントリのトラックバックURL:
http://www.iforum.ne.jp/trackback.php/20100710055135329
表示形式
コメント投稿

コメントは投稿者の責任においてなされるものであり,サイト管理者は責任を負いません。

iForumサポーター

      iFourmの趣旨にご賛同いただき、ご支援いただける企業または個人を募集しています。詳しくは、info@iforum.ne.jp へお願いします。