C# 式形式ラムダと文形式ラムダ

ラムダ式には「式形式」と「文形式」の2種類があります。処理内容の複雑さによって使い分けることで、コードの可読性を保てます。

式形式ラムダ(Expression Lambda)

式形式ラムダは、=> の右側に単一の式を書く形式です。式の評価結果が自動的に戻り値となるため、return キーワードは不要です。

// 式形式ラムダ
Func<int, int> square = x => x * x;
Func<int, bool> isEven = n => n % 2 == 0;
Func<string, string> toUpper = s => s.ToUpper();

Console.WriteLine(square(4));      // 16
Console.WriteLine(isEven(7));      // False
Console.WriteLine(toUpper("abc")); // ABC

1行で完結する処理に適しており、最も頻繁に使われる形式です。

文形式ラムダ(Statement Lambda)

文形式ラムダは、=> の右側を { } で囲み、複数の文を記述できる形式です。戻り値がある場合は return を明示的に書く必要があります。

// 文形式ラムダ
Func<int, int> factorial = n =>
{
    int result = 1;
    for (int i = 1; i <= n; i++)
    {
        result *= i;
    }
    return result;
};

Console.WriteLine(factorial(5)); // 120

条件分岐やループなど、複数の処理が必要な場合に使用します。

両者の比較

式形式ラムダ

単一の式のみ。return 不要。簡潔で読みやすい。

文形式ラムダ

複数の文を記述可能。return が必要。複雑な処理に対応。

Action での文形式

戻り値がない Action デリゲートでも文形式ラムダは有効です。

Action<string> logMessage = message =>
{
    var timestamp = DateTime.Now.ToString("HH:mm:ss");
    Console.WriteLine($"[{timestamp}] {message}");
};

logMessage("処理を開始します");
// [14:30:45] 処理を開始します

基本的には式形式を使い、処理が複雑になったときだけ文形式に切り替えるのがおすすめです。