まるノート

備忘録も兼ねて、様々なお役立ち情報をまとめています。

【C#】ラムダ式について

はじめに

以前、デリゲートについての記事を書きました。

【C#】デリゲートについて - まるノート

その続きとして、今回はC#でよく見かける記法、ラムダ式について調べたことを記載しようと思います。 デリゲートを用いた例として以下のようソースをご覧頂きました。

namespace Sample
{
    // デリゲートを宣言
    delegate bool testDelegate(int n);

    class DeligateTest
    {
        static void Main()
        {   
            // デリゲートの引数に実行したいメソッドを入れる。
            Hoge(new testDelegate(MultipleOf3));
        }

        // nが3で割り切れる場合にTrueを返すメソッド
        static bool MultipleOf3(int n) { return (n % 3 == 0); }

        static void Hoge(testDelegate del)
        {
            for (int n = 1; n <= 100; n++)
            {
                if (del(n)) Console.WriteLine(n);
            }
        }
    }
}


ラムダ式の使い方

上のソースは次のように置き換えることができます。

namespace Sample
{
    // デリゲートを宣言
    delegate bool testDelegate(int n);

    class DeligateTest
    {
        static void Main()
        {   
            // デリゲートの引数に実行したいメソッドを入れる。
            Hoge(new testDelegate((int n) => { return (n % 3 == 0); }));
        }

        static void Hoge(testDelegate del)
        {
            省略
        }
    }
}


「nが3で割り切れる場合にTrueを返すメソッド」を定義せずに、直接DeligateTest.Hogeに代入しています。
このように、一度しか使わない関数を=>を用いてサクッと記述する方法がラムダ式です。

ラムダ式はデリゲートの引数として用いられます。
試しにデリゲート外で記述してもコンパイルエラーになります。

ラムダ式を用いる主なメリットとして以下が挙げられます。

  • 関数名を考える必要がない。
  • 記述を簡略化できる。
  • 別のどの場所で使われているか調べる必要がなくなる。

関数名を定義する際、どんな名称にするか迷うことはないでしょうか。一度しか使わないような関数であれば、ラムダ式を用いることでその労力が不要になります。

記述の簡略化については、(int n) => { return (n % 3 == 0); }の部分を以下のように更に簡単に書くことができます。

    n  =>  n % 3 == 0


引数の型もreturn{}も省略できます。自分自身がそうだったのですが、見慣れない人はかえってわかりにくくそこまで嬉しい気はしないのですが…。

引数がない場合は以下のようにも書けます。

    () => Console.WriteLine("Hello World!!");


以上、簡単ですがラムダ式のメモでした~。