0030 関数を大まかに¶
数学の関数とは何か¶
一言で言えば次のようにまとまります.
- 関数とは「ある入力に対して必ず一定の出力 (値) を返す」モノである.
まずは身の回りにある「関数」の例を紹介します.
例 1: 自動販売機¶
ここでは「理想的な自動販売機」だけを考えます. つまりお金を入れた上でほしい飲み物のボタンを押せば, 常にその飲み物が出てきます. この「ボタンを押せば必ずその飲み物が出てくる」様子がまさに関数の動作です.
念のため注意: 読み飛ばしてよし¶
もしあなたが現実と言葉の定義を大事にする人なら, 次のような状況を心配するかもしれません.
- ある飲み物のボタンを押したときに関係ない飲み物が出てきたら?
- ほしい飲み物が売り切れているときは?
- 必要な量のお金を入れないといけないのでは?
- お釣りも出てくることがあるのはどう思えばいいのか?
こういうことを考えない・考えなくていいことにするのを「理想的な自動販売機」と書きました. 数学・物理・計算機科学などではこの手の理想化はよくあります. よくわからなければ飛ばして構いません.
例 2: 工場¶
工場はある材料をもとにして規格通りの製品を出荷するモノです. こういうモノも関数の一種とみなせます. これも自動販売機と同じような理想化した工場を考えましょう.
普通の関数: $f(x) = x + 40$¶
最後にふつうの数学の関数も紹介しておきます. この関数記号とその使い方自体, かなりのハードルになっていると思います. 実際, 私も高校で本格的に関数が出てきたとき, 記号自体はいいとしてその使い方に慣れるまで 1 ヶ月以上かかったように思います. 2 年くらいずっとやっていれば慣れると思うので, そのくらい大きく構えてください.
さて, $f(x) = x + 40$ は適当な数を入れるとその数に 40 を加えて返してくれる関数です. もしあなたが事務系の仕事をしていたり, Excel でいろいろな集計をやったことがあるなら, Excel の関数でよく似たような計算をしているでしょう. これも数学の意味での関数です.
つまりもしあなたが Excel に慣れているなら, それをそのまま数学の関数に対する感覚に持ち込んでしまって構いません. 特に if 文など少し凝った関数を使ったことがあるなら, それはもう完全にプログラミングです.
最後に: 数学の関数とプログラミングの関数¶
実はこの二つ, 厳密には別物です. プログラミング言語によってはその違いをはっきり表現するために, 関数の他に手続きという言葉・概念を持ち出すこともあります.
簡単に定義だけ書いておきましょう.
- (プログラミングでの) 関数: 入力に対して何かしら出力を返すこと.
- 副作用: 値を返す以外にも何かする.
- 手続き: 副作用を持つ関数.
これが問題になるとき, もっと言えばプログラミングに慣れてから考え直せば十分です.
数学では入力が決まれば出力は常に一通りに決まりますが, 乱数を返す関数のように, プログラミングでは出力がランダムな場合もあります.