Javascriptが持つ関数型言語の特徴(第一級関数、高階関数)

jsはプロトタイプベースのオブジェクト指向言語と呼ばれているが、関数型言語の性質も持ち合わせている。

 

第一級オブジェクト(first-class object)と第一級関数(first-class function)

第一級オブジェクトとは、プログラムにおいて、生成、代入、演算、(引数、戻り値)としての受け渡し、など基本的な操作を制限なしに使用できるオブジェクトを指す。第一級関数は、関数を第一級オブジェクトとして扱うことのできるプログラミング言語の性質を指す。言語によって、第一級オブジェクトと第一級関数の性質は異なってくるが、jsでは以下の点をサポートしている。

  1. 関数をリテラルとして扱うことができる。無名関数を生成し、変数に代入できる。(リテラルとは、数値や文字列など、プログラムで特定のデータ型を用いて直接表記された値のこと。書式を指すこともある。) 
  2. 関数を動的に生成できる。 js first-class object and first-class function

 

高階関数(higher-order function)

高階関数とは、関数を引数に取る関数のこと。

  1. 引数に関数を渡すことができる。
  2. 戻り値に関数を渡すことができる。

    js higher-order function