systembankスタッフのブログ

システムバンクスタッフのブログです。

ラムダ式への道 その1

ラムダ式って何か

ラムダ式って何?」 日本語でうまく翻訳することができません。なので聞かれても「ラムダ式ラムダ式」って答えてしまいます。

他の人はどうやって説明するのかなって思っていつものようにウェブで調べてみてもやっぱりうまい具合に簡潔な説明なものって見つけられません。

なのでラムダ式に至るまでに必要な知識を段階的に説明しようと思います。

ラムダ式への道 その1 delegate

delegate 日本語読みするときの一般名はデリゲートのようです。私は癖でどうしてもデレゲートって呼んでしまいます。

英和辞書的には委任・委譲となるのでしょうか。

C#では関数の型をdelegateとして宣言します、言い換えるとdelegateは型の一種ということになります、ちょっとくどいですね。

同様のものとして、クラスを宣言するときにはclass、構造体を宣言するときにはstruct

など何種類かありますね。

宣言の例を示します。

    delegate string SomeFunction(int value);

引数がint value 返却型がstringのdelegateを宣言しました。引数にvalue命名していますが実際にはvalueという名前はこの型の関数を使用するときには同じ名称である必要がありません。重要なのは引数と返却の型です。

ではこのデレゲートを変数として利用した例を示します。

    class SomeClass
    {
        private SomeFunction _someFunction;
        
        public SomeClass(SomeFunction function)
        {
            _someFunction = function;
        }

        public string DoSomething(int value)
        {
            return _someFunction(value);
        }
    }
    
    class Program
    {
        static string DoSquare(int value)
        {
            return (value * value).ToString();
        }
    
        static void Main(string[] args)
        {
            var some = new SomeClass(DoSquere);
            var value = 10;
            Console.WriteLine(some.DoSomething(value));
        }
    }

 クラスの動作を外部から制御することがこんな形で可能になります

このプログラムではコンソールに10の2乗で100が出力されることになります。しかしSomeClass自身には値を2乗するプログラムは実装されていません。

このようにをdelegateを使ってプログラムを適切に分解することで可用性が高まります(どう分解するかは腕の見せ所になるわけですが...)

今日はここまで

次回もひきつづきdelegateについて解説します。 ラムダ式にいつたどりつくのかは今のところ未定です。

お詫び

初出時のサンプルコードがコンパイルできないものでした、訂正させていただきました(お恥ずかしいかぎりです)。