1 副プログラムとは

1.1 はじめに

ここでは、関数副プログラムとサブルーチン副プログラムについて、学習しま す。いずれも、副プログラムという手法が使われます。そのプログラムの文法 を学習する前に、このプログラム手法がどのようなもので、なぜ便利なのか説 明しておくことが重要であろう。これが分かれば、副プログラムが分かったも 同然です。この手法は非常に便利なので、いかなるプログラム言語でも使われ ているので、ここでその内容を理解し、将来、他の言語を学ぶときに応用でき るようになることが肝要です。

まず、言葉の違いについて説明が必要であろう。通常、副プログラムではなく サブルーチンと言われることが多いので、注意が必要である。また、副プログ ラムに対して主プログラムと言うものがあり、それはメインルーチン、あるい はメインプログラムといわれます。英語と日本語の違いですが、コンピューター はアメリカで発展したので、英語が使われることが多いので覚えておきましょ う。

コンピューターのプログラムは、皆さんが練習問題で作成する数行のものから、 widowsの4千万行2に及ぶ ものまで多種多様です。サブルーチンという考え方は、長いプログラムを書く 場合に非常に有効です。また、長くなくても、分かりやすいプログラムを書く 場合に効果を発揮します。

1.2 自動車の設計・製作

プログラムの書き方の説明に入る前に、アナロジー(analogy 類似)として、自 動車を作ることを考えます。自動車も製品ですが、プログラマーにとってプロ グラムは製品です。自動車は、非常に多くの部品から出来上がっています。た とえば、ピストン、シリンダー、ボルト、プラグ、タイヤ、ハンドル、ばね、 電線、電球、集積回路、コンデンサー、火薬、磁石$ \cdots$など、それこそ大 変な数の部品があります。そして、これを組み合わせて自動車が出来上がりま す。これを、すべて一人で設計することは到底不可能なことは想像できるでしょ う。それでは、どうやって設計するかとと言うと、多くのエンジニアーで寄っ てたかって設計します。エンジン、トランスミッション、ブレーキ、居住空間、 タイヤ、オーディオ機器、空調機器、操作パネル、サスペンション他のように、 部品ごとに設計を行います。重要なことは、部品単位、はっきりと区分けをし て設計をすることです。

部品ごと、設計を行うのですが、それぞれの部品の接続に関しては、予め決め ておきます。たとえば、エンジンを設計する人とトランスミッションを設計す る人の間で、その接続方法を決めてから、各々設計にかかります。そうしない と、最後に組み合わせるときに、それぞれの部品が接続できないということに なります。

部品ごと設計が終われば、すべてを組み合わせて、自動車の設計が完了です。 予めそれぞれの部品の接続方法が決められているので、ちゃんとした自動車が 出来上がります。大雑把に言うと、自動車の設計は、このようにして行われま す。製造もほとんどこれに似ています。部品をつくり、最後に組み立てて完成 です。この方法は、大規模なものを作るときに行われる一般的な方法で、重要 なことは、

です。このように機能別に分けることにより、自動車の設計・製作は格段に分 かりやすくなります。

ここでは、自動車をエンジンやトランスミッション等、1段階に分けましたが、 実際には、更に細かく分けます。エンジンであれば、ピストンやバルブ、シリ ンダーと分けていきます。部品によっては、更に細かく機能ごとに分けていく でしょう。機能ごとに分けると分かりやすくなることを理解してください。

プログラムでは、この特定の機能ごとの集まりをサブルーチンといいます。メ インルーチンは、プログラム全体を統括しているもの、自動車のフレームみた いなものと考えてください。

1.3 分かりやすいプログラムを書くには

大量のパーツからできている自動車も機能別の部品に分けることにより、その 構造が分かりやすくなります。プログラムも一緒で、大規模なプログラムも、 いろいろな機能を持ったプログラムの集まりです。機能ごとに分担しないで、 ひとつの大きなプログラムで、目的を果たすようなものを書くとすれば、非常 に大変です。100行くらいが限界でしょう。1000行のプログラムを書くことは ほとんど不可能でしょう。その様子を図12に示します。

図 1: メインルーチンだけのプログラム

\includegraphics[keepaspectratio, scale=0.7]{figure/only_main.eps}
図 2: 機能毎(サブルーチン)に分割されたプログラム。矢印は、デー タの流れをあらわす。

\includegraphics[keepaspectratio, scale=0.7]{figure/with_subroutine.eps}

このように、機能別に分けることにより、プログラムは分かりやすくなります。 そして、機能がはっきりすれば分担してプログラムを書くこともできます。た だ、自動車の機能ごとの部品と同じように、プログラムで処理するデータの取 り合いはきちんとする必要があります。

自動車の部品にはどれも優劣がありませんが、プログラムの場合、1つだけ特 別な機能のルーチンがあります。メインルーチンと呼ばれるもので、必ず、最 初に実行されるプログラムです。プログラムの場合、1行毎順番に実行される ため、どれから実行するか決める必要があります。自動車の部品の場合、それ ぞれが同時に動き機能するため、メインルーチンに対応するものがありません。

それでは、実際のプログラムでサブルーチンが便利で、プログラムを分かりや すくする様子を見ていきましょう。



ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成19年8月20日


no counter