無名関数見参!
多くのプログラミング言語では、「無名関数」なるモノが利用できる。「三項演算子」と同様漢字だ。こちらも気になるところだが、それよりもネーミング自身だ。「無名」って・・・。「名もなき戦士が散っていった・・・」とか「名乗るほどのモノじゃありませんゼ」とか、昭和の香りがすのだが、どうなんだろう?
書き方
JavaScriptを例に見ていく。
普通の関数
function 関数名(引数1,引数2,・・・){命令1;命令2;・・・}
無名関数
function(引数1,引数2){命令1;命令2;・・・}
1 2 3 4 5 6 7 8 9 |
//普通の関数 function basic(msg){ alert(msg); } //無名関数 function(msg){ alert(msg); } |
関数名が無いだけじゃーないか!。
「えっ、これってもしかして、SDGsとかポリコレ的なアレで、男女別を記載しないように、あえて関数名も記述しないの?」
と、身構えるかもしれないが、安心してください。名前を記述しないわけがありました。
コールバック関数
無名関数はコールバック関数として多用される。コールバック関数とは
「関数を呼び出す際に引数として渡す別の関数」
うㇺㇺ、これじゃーわからない・・・。サンプルコードを見てみる。
1 2 3 4 5 6 7 8 9 |
<script> document.addEventListener('keydown', keyinput); function keyinput(e){ alert(e.key); } </script> |
3行目はイベントを登録する関数。
document.addEventListener(イベント種類、イベント発生時に呼出す関数)
つまり、キーが押される(keydown)と関数keyinputが呼出されるように登録している。この呼出される関数(keyinput)をコールバック関数と言う。
面倒だ!
アプリを作成すると様々なイベントに対応してコールバック関数を登録する。例えばマウスが左クリックされた、ボタンAが押された、ボタンCが押された・・・などだ。その度に関数を定義するのは面倒である。
また、上記例のようにイベントを登録する関数(document.addEventListener)と、イベント処理する関数(keyinput)の記述場所が違うと、プログラムを読む際に互いの関数を探すのが面倒である。
プログラマは怠け者が向いており、怠けるために努力する、と言われている。この面倒な作業を回避するため「無名関数」が登場した。
無名関数を使う
上記を無名関数で記述した。どうでしょうか?怠け者が努力した結果です。
1 2 3 4 5 |
<script> document.addEventListener('keydown', function(e){alert(e.key)}); </script> |
まとめ
- 無名関数を使うと関数定義(名前を考える)しなくていいので楽
- 無名関数を使うと関数を探す手間が省けて楽
- プログラミングの進歩は怠け者たちによる(たぶん、おそらく、しらんけ・・・)
以上