第一級関数
計算機科学において、第一級関数（だいいっきゅうかんすう、、ファーストクラスファンクション）とは、関数を第一級オブジェクトとして扱うことのできるプログラミング言語の性質、またはそのような関数のことである。その場合その関数は、型のある言語では function type（）などと呼ばれる型を持ち、またその値は関数オブジェクトなどになる。具体的にはプログラムの実行時に生成され、データ構造に含めることができ、他の関数の引数として渡したり、戻り値として返したりすることのできる関数をいう。この概念はメタプログラミングとは異なり、コンパイラ呼び出しやeval関数によって生成された関数は含まれない。無名関数も参照。
第一級関数は関数型言語には必要不可欠であり、高階関数のような形で日常的に用いられる。例として、関数とリストを引数に取り、リストの各要素に関数を適用した結果のリストを返すmap (mapcar) 関数が挙げられる。map関数をサポートするプログラミング言語は、何らかの形で関数を関数の引数として渡すことを許容しなければならない。
Schemeでの例:
スタックベースのプログラミング言語では、高階関数の実装における自由変数の取り扱いに関して困難な問題が生じる。これはFunarg問題（"function argument" の略称、）として知られている。
型理論では、型"A"の値を受け取り、型"B"の値を返す関数を"A" → "B"（もしくは"B""A"）と書く。これは"P" → "Q"と似ているが実は同じもので、カリー・ハワード対応（カリー・ハワード同型対応、）によれば、関数型は論理包含に関係しており、ラムダ抽象は自然演繹における仮説、関数の適用はモーダスポネンスに相当する。また多くのプログラミング言語の機能として、型理論は第一級関数が連想配列などのデータ構造をモデルするのにも用いられる。
圏論においては、第一級関数は閉圏に相当する。たとえば単純型付きラムダ計算（）は、カルテシアン閉圏（デカルト閉圏）の言語に相当する。