第一級関数
読み:だいいっきゅうかんすう
外語:first-class functions
プログラミング言語において、関数を通常の値のように操作できる機能をもつもの。
概要
例えばJavaは第一級関数に対応していないが、JavaScriptは全ての関数が第一級関数である。このため関数リテラルを変数に代入できる。
const sum = function (x, y) {
return x + y;
}
sum(1, 2); // →結果は3
Cは関数ポインターを値のように扱えるため似たような使い方はできる。C++ではoperator()を持つ関数は関数をオブジェクトとして扱うことができ、これをファンクター(functor)と呼ぶことがある。しかし通常C/C++は第一級関数をサポートしているとはみなされない。
特徴
対応
関数型言語とスクリプト言語で対応する例が多い。
関数型言語ではLispとその派生(Schemeなど)、Haskell、MLとその派生(OCamlなど)などで使われている。
オブジェクト指向言語ではIo、Scala、Kotlinなどが対応する。
スクリプト言語ではPerl、Tcl/Tk、Lua 、ECMAScript(JavaScript)、PHP、Python、Rubyなど対応するものが多い。
高階関数
第一級関数に対応する言語では、関数の引数に関数リテラルを渡したり、関数の戻り値として関数リテラルを返すことができる。
このように、引数として関数を受け取ったり、戻り値として関数を返す関数は「高階関数」と呼ばれる。
JavaScriptのほかに、Kotlinなども第一級関数および高階関数に対応している。
再検索