C#学習中のため、学習内容をメモしていく。
間違いやアドバイスがあればコメントからよろしくお願いします。
ラムダ式
メソッドの引数としてメソッドを引き渡すことができたりする。
匿名メソッドを短く、簡単にしたものをラムダ式という。
指定した文字列を[]で囲んで表示を行うプログラムを、匿名メソッド、ラムダ式の場合で表すと以下のようになる。
匿名メソッドの場合
class Program
{
static void Main(string[] args)
{
var data = new[] {"あいうえお", "かきくけこ", "さしすせそ" };
var lt = new Program();
// 匿名メソッド
lt.ArrayWalk(data, delegate (string d)
{
return $"[{d}]";
});
}
void ArrayWalk(string[] data, Func<string, string> output)
{
foreach (var val in data)
{
Console.WriteLine(output(val));
}
}
}
delegateキーワードを利用してメソッドを直接埋め込んでいる。
ラムダ式の場合
class Program
{
static void Main(string[] args)
{
var data = new[] {"あいうえお", "かきくけこ", "さしすせそ" };
var p = new Program();
// ラムダ式
p.ArrayWalk(data, (string d) =>
{
return $"[{d}]";
});
}
void ArrayWalk(string[] data, Func<string, string> output)
{
foreach (var val in data)
{
Console.WriteLine(output(val));
}
}
}
delegateキーワードの代わりに=>で引数とメソッドの本体をつないでいる。
ラムダ式は条件によりさらに簡素化することができる。
・メソッド本体が一文の場合{ }を省略可能
・式の戻りがそのまま戻り値と見なされるので、return命令を省略可能
p.ArrayWalk(data, (string d) => $"[{d}]");
・引数の型は暗黙的に推論されるので、ラムダ式では省略可能
p.ArrayWalk(data, (d) => $"[{d}]");
・引数が1個の場合は、引数をくくるカッコも省略可能
ただし、引数がない場合はカッコの省略は不可
p.ArrayWalk(data, d => $"[{d}]");
参考した本
独習C#
おわり。