0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ラムダ式の基礎

Last updated at Posted at 2021-12-19

ラムダ式とは

C#3.0で導入されたデリゲート(delegate)や、メソッド・ベースのLINQ文を簡単に記述するためのもの。

(参考:デリゲートについて)
[デリゲート再入門][link-1]
[link-1]:https://atmarkit.itmedia.co.jp/fdotnet/onepoint/onepoint03/onepoint03_01.html

今ではだいぶ浸透してきていると思いますが、
初めて見た時は正直わけがわからなかったです(笑)
以下はラムダ式の冗長な書き方から始めて、
最も簡潔な書き方に変更していく様子です。

###①STEP0(冗長なコード)
judge変数の右辺がラムダ式と呼ばれているもの。
(ラムダ式は一種のメソッド)
C#2.0の時のdelegateの代わりに =>(ラムダ演算子)
が使われています。
=>の左側が引数宣言している箇所。
こちらでは式がjudge変数に代入されるだけで{}内の処理が実行されるわけではありません。


            Predicate<int> judge = (int n) =>
            {
                if (n % 2 == 0)
                    return true;
                else
                    return false;
            };

            var count = Count(numbers,judge);

###②STEP1
変数judgeは、代入後すぐにCountの引数に渡してしまうため、judge変数をCountの引数にします。


            var count = Count(numbers,
                (int n) => {
                    if (n % 2 == 0)
                        return true;
                    else
                        return false;
                }
                );

###③STEP2
次の2点から、if文をなくすことができます。

1.returnの右側には、式を書くことができる。
2."n % 2 == 0"は式であり、boolean型の値を持つ。

var count = Count(numbers, (int n) => { return n % 2 == 0; });

###④STEP3
式の{}の中が1つの場合は{}とreturnを省略できる。

var count = Count(numbers, (int n) => n % 2 == 0);

###⑤STEP4
ラムダ式では引数の型を省略できます。
(コンパイラが型を正しく推論してくれるため)

var count = Count(numbers, (n) => n % 2 == 0);

###⑥STEP5
引数が1つの場合、()を省略することができます。

var count = Count(numbers, n => n % 2 == 0);

よく見かけるラムダ式の形になりました。

ラムダ式を使った例

ラムダ式は「どうやるか(HOW)」ではなく、「何をやるか(WHAT)」の視点で、コードを書けるようになりました。

・奇数の数をカウントする。

var count = Count(numbers, n => n % 2 == 1);

・5以上の数をカウントする。

var count = Count(numbers, n => n >= 5);

・数字の1が含まれている数をカウントする。

var count = Count(numbers, n => n.ToString().Contains('1'));
参考文献
この記事は以下の書籍を参考にして執筆しました。

実戦で役立つ
C#プログラミングのイディオム/定石&パターン

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?