【プログラミング】吾輩は関数である名前はまだない


はじめに

この記事ではチョットキニナル
プログラミングワードについて書いています。


ラムダ式

初めてラムダ式と聞いて
ピンと来ませんでしたが
ラムダ式とは要するに

「無名関数」を表現する為の
書き方のことである。


無名関数

英語だといろんな呼び名があるみたいです。

nameless function
anonymous function


無名関数とは

その名の通り
名前を持たない状態で定義される関数のこと

通常の関数の場合は以下のような定義方法を使うと思う。
PHPで例を出すと

<?php
  function add($args1, $args2) {
    return $args1 + $args2
  }
  $result = add(1,2);
  echo $result;
  //3
?>

無名関数で定義すると

名前がない状態で定義されるが
変数に代入したときに関数オブジェクトに化ける。

この時初めて関数名を持つことができる。

<?php
  $add = function ($args1,$args2){
      return $args1 + $args2;
  };

  $result = $add(1,2);
  echo $result;
  //3
?>

どんなときにつかう

周りを見渡す限りでは
主にイベントプロシージャに使われている。
ような気がする。

というのも
イベントプロシージャは別で定義するより
すぐその場で書いてしまったほうが
よかったりする。

C#では
コマンドボタンオブジェクトに
イベント登録を行うとき使う。


使うことのメリット

・関数を定義しないのでコンパクトであること
・定義済の関数名に依存しないこと
・コールバック関数として利用しやすいこと


まとめ

今回はラムダ式について書きました。
うまく扱えれば
ベーシックな関数定義を増やすことなく
関数を定義できます。
ただ、増やしすぎても
保守上の観点からはとても良くないので
適切に扱いましょう。

訂正

【無名関数で定義すると】の
関数閉包の例として取り上げたコードについて

「こういった処理をクロージャ(関数閉包)という。変数に関数を包み込むという感じかな。」

と記載させていただきましたが
関数閉包の場合は関数オブジェクトを返して
変数に代入する場合でした。

ご指摘くださった方(https://qiita.com/tadsan)
誠にありがとうございました。


参考資料

ラムダ式 (C# プログラミング ガイド)


おわり