実みつるのPreプログラミング

プログラミングの学習を考えている方へ

5-3 戻り値の無い関数

第五章 関数

(3)戻り値の無い関数

前回は関数の一つの要素である引数について見てきましたが、今回は戻り値について考えていきたいと思います。

 

これまで見てきた通り、関数の戻り値とは与えられた引数(前回お話した引数が無いというケースも含みます)に応じ1つだけ返ってくるものです。戻り値は引数と違い、一度に複数返ってくることは有りません。

 

では、引数と同様に「戻り値が無い」などという関数は有り得るのでしょうか。引数が無い場合と同じく、本来の関数の役割に反する様に思えますが、実はコンピューターのプログラムでは存在します。イメージとしては、「関数に引数を渡したのだが、何らかの動きをしたあと答えが返ってこなかった」という感じでしょうか。

 

例えば、「引数の数だけコンピューターがチャイムを鳴らす」という関数、Chimeを考えてみます。

 

? = Chime(1)

 

上に書かれた通り、引数に1を設定すると「ピンポーン」とチャイムが1回鳴ります。2なら2回、10なら10回鳴ります。この場合、「チャイムが鳴る」という事象自体が実質戻り値になっているのが分かりますでしょうか。この事象は数値でも語句でもありませんので、関数における戻り値として表現する事は不可能です。あえて表現するなら、

 

1回チャイムが鳴る = Chime(1)

 

とでもなるでしょうか。しかし1回チャイムが鳴るのは動作であり、値ではありません。よってこの場合は、

 

Chime(1)

 

と書くのが一般的です。これは「戻り値が無い」という事を表しています。

 

同様に前回例として挙げた、2つの色を混ぜた結果を戻り値とする関数を考えてみます。以下の様な関数でした。

 

ピンク = f(白,赤)

 

ここで新たな関数ChangeBackgroudというものを作ってみます。これは「引数として与えられた2つの色を混ぜ、画面の背景色をその色にする」という機能があるとします。先程と同様に、結果は「画面の背景色が変わる」という事象ですので、戻り値は存在しません。つまり

 

ChangeBackground(白,赤)

 

と書かれていたら、画面の背景色がピンク色に変わるというイメージです。

 

さて、これまで引数や戻り値の無い関数を見てきて気付いたと思いますが、コンピューターのプログラムにおける関数は、本来関数が持っている性質から少し離れます。関数というよりは、「処理」というイメージに近いと思いませんか。

 

そうです。実はプログラムにおける関数は、コンピューターが行うべき処理、すなわちプログラムそれ自体というイメージです。コンピューターのプログラムを数学で出てくる関数を利用して表現した…という感覚でしょうか。ですから引数や戻り値が無い、というやや強引な表現をした関数が存在してしまうのです。

 

そこで次回は関数の究極の形を考えたいと思います。いよいよ最終回となりますので、どうか最後までお付き合い下さい。