第一級関数
読み:だいいっきゅうかんすう
外語: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などが対応する。
 スクリプト言語ではPerlTcl/Tk、Lua 、ECMAScript(JavaScript)、PHPPythonRubyなど対応するものが多い。

高階関数
 第一級関数に対応する言語では、関数の引数に関数リテラルを渡したり、関数の戻り値として関数リテラルを返すことができる。
 このように、引数として関数を受け取ったり、戻り値として関数を返す関数は「高階関数」と呼ばれる。
 JavaScriptのほかに、Kotlinなども第一級関数および高階関数に対応している。

再検索