こんにちは、みんな!今日は、プログラミングで非常に有名な概念 (ファーストクラス関数) について説明します。このトピックに関するリソースはすでにたくさんありますが、この記事から得られる新しい情報がまだあるので、理解を深めるために時間をかけて単純化しました。
ウィキペディアによると、関数を第一級市民として扱うプログラミング言語は、第一級関数を持つと言われています。
これは、言語が関数を引数として他の関数に渡したり、別の関数からの値として返したり、変数に割り当てたり、データ構造に格納したりすることをサポートしていることを意味します。
Javascript では、関数は別のタイプのオブジェクトであるため、このように機能します。この概念に慣れていない場合、特にプログラミングのバックグラウンドが異なる場合は、かなりぎこちなく感じるかもしれませんが、今のところ、それについて頭を悩ませてください。オブジェクトは値であるため、関数も同様であり、Javascript はそれらを 1 つとして扱います。これにより、関数を変数に格納したり、プロパティを追加したりできるため、より柔軟なコードを記述する新しい方法が開かれます。
簡単にするために、要点を箇条書きにまとめました。ファーストクラス関数をよりよく理解するために、いくつかのポイントを明確にします。
第一級関数で可能になることの 1 つは、関数を引数として渡すことです。このスタイルのコードは、多くの Javascript コードで見ることができます。たとえば、Javascript コールバック関数を引数として受け取る addEventListener メソッド。
button.addEventListener('click', function(){ console.log('hellloooo') })
前のコード スニペットでは、addEventListener が 2 つの引数を受け取り、2 番目の関数がコールバック関数であり、ボタンがクリックされた後に呼び出されることがわかります。
Javascript の別の関数から関数を返すことができます。 Javascript の多くのオブジェクトには、javascript の配列関数などのメソッドがあります。また、関数のメソッドがあります。たとえば、 call()
、 bind()
、 apply()
Javascript メソッドはすべて Javascript 関数で呼び出すことができます。
function count(){ Let counter = 0; return function(){ counter++ } }
count 関数は、カウンターを更新する別の関数を返しました。
Javascript では、Javascript 値を平均化する場合と同様に、関数を変数またはプロパティに格納できます。
Const multiply = (a,b) => a * b
上記の Javascript アロー関数は、呼び出すことができる乗算変数に格納されます。
このように(3,5)を乗算します。
ファーストクラス関数の主な意義の 1 つは、それによって高階関数を記述できるようになることです。
これは、別の関数を引数として受け取る関数か、新しい関数を返す関数のいずれかです。これは、ファーストクラス関数があるからこそ可能です。
button.addEventListener('click', function(){ console.log('hellloooo') })
ここでaddEventListener()
は、別の関数を引数として受け取るため、高階関数の例です。 HOF が実行された後に呼び出されるため、Javascript コールバック関数を参照することがよくあります。高階関数と第一級関数の主な違いは、第一級関数はプログラミング言語にある機能またはない機能であり、単にすべての関数が値であることを意味します。
結論として、実際にはファーストクラスの関数は存在しないことを知っておくことが不可欠です。それは単なる概念です。ただし、言語がファーストクラスの関数をサポートしているため、実際には可能な高階関数があります。