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

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

5-2 引数の無い関数

第五章 関数

(2)引数の無い関数

前回は「関数」とは何かという事を考えてきましたが、今回は関数の要素の一つである「引数」、すなわち関数に引き渡すものについて考えていきたいと思います。

 

これまでは引数が1つという事例を見てきましたが、引数は1つでなくても構いません。例えば、以下の様な数式を考えてみます。

 

z = x + y

 

zはxとyを足したものである、という内容になります。xが1でyが2であれば、zは3になります。この場合、xとyの値が定まって初めてzが決まります。これを関数で表すと以下の様になります。

 

z = f(x,y)

 

関数に渡す引数(xとy)がカンマで区切られて2つ有ります。この様に、引数を複数にしても関数は成り立ちます。では以下の関数はどんな機能をもっているでしょうか。

 

あ = f(1,1)

お = f(1,5)

か = f(2,1)

 

引数の数字に応じ、仮名が一文字戻っています。これは50音表の位置を数字で与えると該当する仮名を答える関数になります。1番目の引数が「あ、か、さ、た、な」といった「行」を、2番目の引数は「あ、い、う、え、お」の母音の位置を表す「段」を指定しています。では以下の関数はどうでしょうか。

 

ピンク = f(白,赤)

オレンジ = f(赤,黄)

緑 = f(黄,青)

 

絵の具で色と色を混ぜると、別の色になります。この関数は与えられた2つの色を引数として、混ぜた結果の色を答えています。

 

これまでは引数の個数を増やすケースを見てきました。では逆に、引数が0個、すなわち「引数無し」という関数は存在するのでしょうか。引数の数に制限は無いのですが、そもそも「何かを与えた結果、一定の規則に従い何かを得る」という関数本来の役割に反している様です。

しかし数学では考えられないこの様な関数が、コンピューターのプログラムでは存在します。例えば以下の様な関数OutputYoubiを考えてみます。

 

日曜日 = OutputYoubi(2023年1月1日)

月曜日 = OutputYoubi(2023年1月2日)

火曜日 = OutputYoubi(2023年1月3日)

 

この関数は、年月日を引数としてその日の曜日を戻り値として返します。ところで「今日の曜日を知りたい」という場合はどうしたら良いでしょうか。仮に今日が2023年1月4日だったとすれば、先ほどの関数の引数に「2023年1月4日」を設定すれば良いでしょう。

 

水曜日 = OutputYoubi(2023年1月4日)

 

ですがこの場合、曜日を知りたいたびに今日の日付を確認しなくてはなりませんのでやや不便です。仮に今日の日付をコンピューターが自力で得られるとすれば、新しくYoubiTodayという関数を作る事ができます。例えば今日が2023年1月4日だったとすれば、

 

水曜日 = YoubiToday( )

 

という感じです。この関数の機能は「今日の曜日を戻り値として返す」ですので、与えられる情報、すなわち引数は不要なのです。ですからカッコの中に何も無い状態、すなわち「( )」という表記になります。

 

これより一つ前の関数、OuuputYoubiとは何が違うか考えてみます。OutputYoubiは戻り値の根拠になる情報として年月日が必要です。引数として年月日が無ければ曜日を求められません。一方、YoubiTodayは「今日の曜日」と限定されていますので、これ以上の情報は不要となります。すなわち、引数が要らない関数になるのです(実際にはこの関数を利用すると、コンピューターに格納されている今日の日付を読み込み、内部で曜日を算出するといった作業が行われます)。

 

この様に、関数とも思えない「引数が無い関数」はコンピューターのプログラムでは多く見られます。この段階で見慣れておくとプログラミングの勉強で役立つと思います。

 

今回は引数が複数、或いは無い関数というものを見てきました。次回は戻り値について考えていきたいと思います。