第一級関数とは
JavaScriptやPythonを学習していると、「第一級関数」というワードに遭遇することがよくあります。
ざっくりとした意味を説明すると、「第一級関数」とは、単なる値として扱われる関数を意味します。
例えば、JavaScriptでは関数を変数に格納できます。
// 変数に関数を格納できる
const add = function(x, y){
return x + y;
}
console.log(add(1, 2)); // 3と表示される
さらに、関数の引数に他の関数を取ることも可能です。これは一般的にコールバック関数と呼ばれます。
function helloGoodbye(text) {
text();
console.log('さようなら');
}
function hello(){
console.log('こんにちは');
}
// 関数の引数に関数をとる
helloGoodbye(hello)
// こんにちは
// さようなら
この他にも関数を結果として返すことができたり、データ構造に格納できたりといった特性があります。
そんな第一級関数ですが、学習中の自分にとっては、先述のような機能がまとめて「第一級」と表現されていることが疑問でした。
関数を値として扱うことのどこが「第一級」なんだ。。?
個人的に、言葉の意味と内容に繋がりを感じる方が、内容の記憶がしやすい質なので語源を調べました。
第一級関数の本質
どうやら「第一級」とは「言語の全ての特性を自由に利用できる」という点を指しているようです。
そもそも第一級関数とは、1960年代にコンピュータ科学者であるクリストファー・ストラッチーによって導入された表現で、「第一級の市民(functions as first-class citizens)」とも呼ばれています。
冒頭でも触れた通り、第一級関数は変数に代入できたり、関数の引数にできたり、さまざまな言語の特性を自由に利用できます。
その点を指して「第一級の市民」と表現するあたり、クリストファー・ストラッチーもなかなかブラックですね。
おわりに
今回はJavaScriptの学習中に気になった「第一級関数」について深掘ってみました。
それぞれの概念が持つ意味を理解することで、より深くプログラミング言語を理解できます。
次に「第一級関数」を見かけた時は、ぜひその背後にある概念と考え方を思い出してみてください。