2016年9月2日金曜日

ラムダ式が分かりにくい人へ

ラムダ式が分かりにくい人へ朗報です。






うそです。

ラムダ式のサンプルを見ていてよく思うのですが、よくあるサンプルが分かりにくいのって、
returnがないからじゃないですか?

var func1 = new Func<Int32, Int32>(val => val * 2);

これは、Int32の引数valを入力として、戻り値にval×2をした値を返しています。
CとかC++をやっていると、無意識に、return がない!!って文句言いたくなります。

ってことで、すこしずつ括弧を増やしていってみます。
var func1_1 = new Func<Int32, Int32>((val) => (val * 2));
これで、引数のvalと処理内容 (val * 2)が多少わかりやすくなったと思います。
じゃぁ、次はこれ!

var func2 = new Func<Int32,Int32>(
    (val) =>
    {
        return val*2;
    });
ここまでくれば、なんとなくジェネリックぽい感じで理解できるのではないでしょうか。
Funcに対して、引数の型と、戻り値の型を指定<Int32,Int32>しておいて、
引数使いたいから、引数の変数名(val)を書いておく。

でもって、ここから関数だよとコンパイラーに教えて(=>)あげて
あとは通常の関数みたいに書くだけです。

これで、ラムダ式は、完璧!!!

でも、これでラムダ式が書けるようになると、
シンプルなコードが書きたくなって、func1に近づいていくのだと思います。




ち・な・みに、


戻り値が必要なFuncで、波括弧で処理を囲う場合には、 必ずreturnが必要です。
var func4 = new Func<Int32, Int32>(
    (val) =>
    {
        val * 2;
    });

こうやって書くと、戻り値がないぞ!!ってVisualStudioさんに怒られます。
エラー CS1643 型 'Func<int, int>' の ラムダ式 に値を返さないコード パスがあります。

0 件のコメント:

コメントを投稿