涼の成長記録

自らの人生に主導権を持つべく、独立を目指して2014年3月31日を持ってITエンジニアを退職。そんな23歳♂の成長記録。

数学の関数とプログラミングの関数

定義

数学における関数(function)は、ある値の入力に対して、常に同一の値を返すものを言います。プログラミングの世界では、そういった関数のことを「参照透過性がある」と表現します。つまり、その関数がいつ、どこで呼び出されたとしても、入力された値が同一であれば、返ってくる値も同一であるということです。


わざわざ「参照透過性がある」とか「純粋関数」とか表現するということは、プログラミングにおいて単に"関数"と表現した場合、入力された値が同じであっても同じ値が返るとは限らないということです。例えば、現在時刻を返す関数は毎回違う値が返ってきます。



関数を関数と呼びたくない病

そんなわけで、私はプログラミングにおける関数を"関数"と呼ぶことを躊躇ってしまう病に犯されています。何も考えずにルーチンと呼んでいたりしますが(恐らく初めて呼んだ技術書 Code Completeの和訳の影響)、これも間違いですね。


日々繰り返される作業を"ルーチンワーク"と言ったりしますが、ルーチン(Routine)は、何度も必要とされる定型的な処理を固めたものです。じゃあ1度しか実行されないものを"ルーチン"と呼ぶのはおかしいですねということで。


手続き、格好よく横文字で言えばプロシージャ(procedure)と呼ぶのが結構しっくり来たりするのですが、Pascalでは値を返すものを関数(function)、返さないものを手続き(procedure)と呼ぶため、やっぱりややこしいので残念な感じになってしまいます。



関数って呼ぶのは間違っていると思う

これは私の勝手な考えですが、プログラミングにおける関数を"関数"と訳したのは間違えだと思うのです。17世紀後半にドイツの哲学者であり、数学者でもあるゴットフリート・ライプニッツがfunctionという単語に、数学としての意味を持たせました。微積分が発見された頃です。


この時、元々functionには「機能」「作用」といった意味がありました。いわゆるダブル・ミーニングってやつですね。で、数学における関数の意味は「作用」側ですよね。対してプログラミング言語におけるfunctionは「機能」側でしょう。


じゃあ、プログラミング言語におけるfunctionを「関数」と訳したのは間違いじゃないかと。僕は勝手にそう思っているのですが、既に"関数"で流行ってしまっているものを、わーわー言ってもしょうがありません。やっぱりデファクトスタンダードに合わせるのが正解なんじゃないかと。


ということで、結論はKof Projectは"関数"で統一するか(泣)ってこと。
ではでは。