エスプリフォートでは、業務内でのシステム開発以外でも、日々アンテナを張りながら仲間同士お互いに技術力を磨き合っています。
そして高めた技術力を顧客のために如何に生かしていくのかということを考え、顧客から頼られる存在としてあり続けています。
今回は「第一級関数」をご紹介いたします。
第一級関数とは
第一級関数とは、関数を「第一級オブジェクト(first-class object)」として扱うことができるものを指します。
では、この「第一級オブジェクト」とは、何でしょうか?
ざっくりと説明すると、これは、以下の特徴を持つオブジェクトの事を指します。
(ここでいうオブジェクトとは、プログラム言語の要素、と思ってください)
- 変数に代入できる
- 関数のパラメータとして渡すことができる
- 関数の戻り値として返すことができる
つまり、第一級関数というのは、以下の特徴を持つ関数を指します。
-
関数を変数に代入できる
→ プログラム例をすぐ見たい方はこちら -
関数のパラメータとして、関数を渡すことができる
→ プログラム例をすぐ見たい方はこちら -
関数の戻り値として、関数を返すことができる
→ プログラム例をすぐ見たい方はこちら
また、これらの特徴を組み合わせることで、関数を組み立てることもできます。
→ プログラム例をすぐ見たい方はこちら
文章だけではイメージがつきにくいので、第一級関数を使用できるプログラム言語の一つである「JavaScript」で、プログラム例を見ていきましょう。
関数を変数に代入しているプログラム例
var fn = function () {
alert("hello");
}
fn();
関数(ここでは無名関数)を変数fnに格納後、実施しています。
これを実行すると、「hello」とダイアログが表示されます。
関数のパラメータとして、関数を渡すことができるプログラム例
var fn = function(argFn) {
argFn();
}
fn(() => alert("hello2"));
「argFnというパラメータ(関数)を受けてそれを実施する」という関数(ここでは無名関数)を変数fnに格納後、実施する関数を渡して実施しています。
これを実行すると、「hello2」とダイアログが表示されます。
関数の戻り値として、関数を返すことができるプログラム例
var fn = function(argFn) {
return argFn;
}
fn(() => alert("hello3"))();
「argFnというパラメータ(関数)を受けてそれをそのまま返す」という関数(ここでは無名関数)を変数fnに格納後、実施する関数を渡して実施しています。
これを実行すると、「hello3」とダイアログが表示されます。
関数を組み立てるプログラム例
var repeat = function(...argParam) {
return function(fn) {
argParam.map(p => fn(p));
}
}
repeat("hello41", "hello42")(alert);
「argParamいう複数のパラメータ(関数)を受けて、それを順番に実行する」という関数(ここでは無名関数)を変数fnに格納後、実施する関数をパラメータから一つずつ渡して実施しています。
無名関数内で関数を組み立てた関数を返しています。
これを実行すると、「hello41」「hello42」とダイアログが続けて表示されます。
まとめ
今回はJavaScriptでのプログラム例を見てみましたが、「第一級関数」を使用できるプログラム言語は他にもあります(Python、Ruby、等)。
うまく活用することで、副作用が少なく、分かりやすいプログラムを作ることができるようになりますので、よければ試してみてください。