関数
Function
オブジェクトに結び付いている場合はメソッドと呼ばれることがある。 数学における関数とは $ f(x) の$ fのようなもので、入力に対して、何らかの操作の後、出力が得られるものである。
プログラミング言語では、この考え方を流用している。
言語により関数の書き方は様々である。このため、あくまで概念として以下に提示する。
関数には引数として入力を複数渡すことができる。
例: $ f(a, b, c)
出力は関数の値とする。
例: $ y = f(a, b, c)
「出力は関数の値」とすることで、入れ子にして関数を適用することができる。
例: $ f(g(x), h(y))
黎明期のプログラミング言語では、出力を単一の値とすることがほとんどだった。
また、出力先のメモリの確保とコピーのコストの問題から、出力先を入力として渡すような方式が標準となってしまった。
このため、以下のような問題が起きている。
入力と出力の混在
出力を複数返すために、入力側で出力先変数やバッファを提示する。
出力とエラーの混在
エラーが起きた時にそれを返す方法が必要だが、出力でそれを行ってしまう。
「負の場合はエラー」という形で、出力の値域から外れたものを「エラー値」としてしまう。
現在では、関数で単一の値(スカラー)を返す方法は間違いだと考えられるようになってきている。
以下のようにして、複数の出力を返すようになってきている。
タプルを返す。(タプルは配列ではなく、複数の型が順に入る集合体。)
(オブジェクト型)配列を返す。
構造体を返す。
複数の属性を持つオブジェクトを返す。
エラーは「例外」として分離することで、出力とエラーの混在を防ぐ方法が主流である。