スポンサーリンク
※サイト運営にサーバーは必須です※
~ ロリポップ! はコスパのよい初心者向けサーバーです~
目次
ラムダ式
メソッドは必要だが、他のクラスからアクセスされることはないという時にラムダ式は役に立ちます。
匿名メソッドと同様に、デリゲートを介してのみでしかメソッドを使わない場合に使用されます。
ラムダ式を使用すれば、メソッドを定義して実行することに相当する操作を、メソッド内に埋め込むことができます。
ラムダ式は以下のように記述します。
(引数) =>式;
イカに似ている「=>」はラムダ演算子です。
式が複数行になる場合は以下のように中カッコ{}とカンマ;が必要です。
(引数) =>
{
式;
式;
};
ラムダ式はよく匿名メソッドと比較されます。
ラムダ式はC#3.0の機能で、匿名メソッドはC#2.0の機能です。
ラムダ式は匿名メソッドと比較して、少ないコード量で同様の内容を記述できます。
ラムダ式は匿名メソッドの上位互換と言っても過言ではありません。現在、匿名メソッドはほとんど使用されません。
引数なし、戻り値なしの場合
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Lambda12 { class Program { delegate void Del(); static void Main(string[] args) { Del message; //匿名メソッドの場合 message = delegate { Console.WriteLine("こんにちは"); }; message(); //ラムダ式の場合 message = () => Console.WriteLine("こんにちは"); message(); } } } |
実行結果
こんにちは
こんにちは
複数行の処理がある場合
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Lambda13 { class Program { delegate void Del(); static void Main(string[] args) { Del message; //匿名メソッドの場合 message = delegate { Console.WriteLine("こんにちは"); Console.WriteLine("おはようございます"); }; message(); //ラムダ式の場合 message = () => { Console.WriteLine("こんにちは"); Console.WriteLine("おはようございます"); }; message(); } } } |
実行結果
こんにちは
おはようございます
こんにちは
おはようございます
引数あり、戻り値ありの場合
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Lambda14 { class Program { delegate int Calc(int x, int y); static void Main(string[] args) { Calc add; //匿名メソッドの場合 add = delegate (int x, int y) { return x + y; }; Console.WriteLine(add(3, 6)); //ラムダ式の場合 add = (x, y) => x + y; Console.WriteLine(add(3, 6)); //引数の型を明示したい場合 //add = (int x, int y) => x + y; //returnを明示したい場合 //add = (x, y) => //{ // return x + y; //}; } } } |
実行結果
9
9
匿名メソッドと比較して、データ型を指定する必要はありません。(型推論が働き、コンパイラー側でデータ型を判断してくれます)
ただし、明示的に書いても問題はありません。
add = (int x, int y) => x + y;
また、ラムダ式が一行で完結する場合return文も必要ありません。
ただし、複数行の処理文がある場合はreturnが必要です。(処理文が一行の場合でも明示的に書くことは可能です)
add = (x, y) =>
{
return x + y;
};
まとめ
匿名メソッドと比較したラムダ式のメリットは「コード量が減る」という点です。
「コード量が減る」主な要因として以下のような点が挙げられます。
・delegateキーワードがない
・コードが一行なら中カッコ{}を省略できる
・戻り値のある場合でコードが一行なら、return文を省略できる
・型推論が働くので、型の指定を省略できる
~ギャンブルに絶対儲かる必勝法があるのだろうか?~
私(サイト主)はこの疑問に対して非常に興味を持ち、プログラミングで検証してみました。
このサイトを応援してもいいかなと思う人はぜひとも購入を検討してみてください。