前回までPredicateまでをやりましたね。ここからはラムダ式の書き方をやって行きますが,ここまでやってきたことを一度,まとめてみましょう。
C#の歴史
C#の1.0,つまり初期バージョンですでにdelegateがあるので,メソッドの引数に「式」や「メソッド」を投げたい場合は,このdelegateを使うことで実現可能でした。ただ,匿名メソッドが存在しないため,必要なメソッドを書く必要がありました。Predicateも存在していないため,delegateを必要な定義で宣言しておく必要もありました。
C#2.0での匿名メソッドの出現により,毎回メソッドを作成しなくても,メソッド呼び出し時に,直接匿名メソッドを書くことができるようになり,使い捨てのメソッドであれば,名前も考える必要もなく引数として渡すことができるようになりました。Predicateを合わせて使うことで,引数が1つで戻り値がboolの場合は,delegateの宣言をしなくてもよくなりました。これはC#2.0で出現したジェネリックという型指定ができるようになった恩恵です。ここまでで,匿名メソッドとPredicateである程度,実装はやりやすくなりましたが,Predicateの定義に合わないものは,自前でdelegateを作成する必要があります。
C#3.0では,C#2.0の進化をさらに進め,より書きやすいようにするために出てきたのが,ラムダ式や,Action(アクション),Func(ファンク)というものです。これらの書き方は後述しますが,このC#3.0の時点で,C#の機能としては,ある程度安定したという印象です。
C#1.0では,最低限の機能が提供され,C#2.0ではジェネリックなどの進化で便利になり,C#3.0のラムダ式などで,C#はある程度の完成形になったと思います。その後のC#4.0でのリフレクション,Task,C#5.0でのasync,await,C#6.0以降もいろいろと追加されていますが,C#3.0が一つの完成形で,その補足として,進化を続けているという印象です。要するにC#3.0までの知識は必須で,ここまでの知識があれば,文法としては大体実装できるし,読めるという感じになり,強いていうなれば,async,awaitが非同期を書きやすくしたという意味で画期的な進化であり,それ以外の文法は,そこまで大した変化はないと思います。
#02_プロジェクトの作成
#03_ラムダなしで実装
#04_ラムダなしで実装_共通関数
#05_ラムダなしで実装_引数追加
#06_delegateを定義する方法
#07_delegateの使い方
#08_delegate_引数2つ
#09_匿名メソッドの使いかた
#10_Predicateの使い方
#コラム_C#の歴史とここまでのまとめ
#11_ラムダ式の書き方
#12_ラムダ式の実装
#13_FuncとActionとは
#14_Funcの実装とラムダ式複数パラメータの書き方
#15_ラムダの右辺が複数行の時の書き方
#16_Actionのパラメータありの実装
#17_Actionのパラメータありとラムダ式の書き方
#18_Actionのパラメータなしと引数なしのラムダ式の書き方
#19_コレクションに対する代表的なラムダ式の書き方
#20_カスタムクラスのコレクションに対するラムダの書き方