🤴

「第一級関数」←どのへんが第一級なんだ??

2023/05/21に公開

第一級関数とは

JavaScriptやPythonを学習していると、「第一級関数」というワードに遭遇することがよくあります。
ざっくりとした意味を説明すると、「第一級関数」とは、単なる値として扱われる関数を意味します。
例えば、JavaScriptでは関数を変数に格納できます。

const add = function(x, y){
    return x + y;
}

console.log(add(1, 2)); // 3と表示される

さらに、関数の引数に他の関数を取ることも可能です。これは一般的にコールバック関数と呼ばれます。

function goodbye(text) {
    text();
    console.log('さようなら');
}

function hello(){
    console.log('こんにちは');
}

// 関数の引数に関数をとる
goodbye(hello) 
// こんにちは
// さようなら

この他にも関数を結果として返すことができたり、データ構造に格納できたりといった特性があります。

そんな第一級関数ですが、学習中の自分にとっては、先述のような機能がまとめて「第一級」と表現されていることが疑問でした。

関数を値として扱うことのどこが「第一級」なんだ。。?

個人的に、言葉の意味と内容に繋がりを感じる方が、内容の記憶がしやすい質なので語源を調べました。

第一級関数の本質

どうやら「第一級」とは「言語の全ての特性を自由に利用できる」という点を指しているようです。

そもそも第一級関数とは、1960年代にコンピュータ科学者であるクリストファー・ストラッチーによって導入された表現で、「第一級の市民(functions as first-class citizens)」とも呼ばれています。

冒頭でも触れた通り、第一級関数は変数に代入できたり、関数の引数にできたり、さまざまな言語の特性を自由に利用できます。

その点を指して「第一級の市民」と表現するあたり、ストラッチーもシニカルですね。

おわりに

今回はJavaScriptの学習中に気になった「第一級関数」について深掘ってみました。
それぞれの概念が持つ意味を理解することで、より深くプログラミング言語を理解できます。
次に「第一級関数」を見かけた時は、ぜひその背後にある概念と考え方を思い出してみてください。

Discussion