私はラムダ式が苦手でした。
その理由について、改めて考えてみます。
上記リンク内のコードを例に挙げながら、御説明いたします。
区切りが分からないぞ?
Func<int, int> square = x => x * x; Console.WriteLine(square(5));
初めに違和感を覚えたのは、=>
を使った見慣れない書式でした。
これが=
と同じ行の近い位置にある事で、区切りが分からなくなったのだと思います。
よく考えればこれも変数宣言なので、=
の左辺が変数名で右辺が式であるはずなんですよね。
下記のようにかっこで補足すると、この命令文の意味はより分かりやすくなります。
Func<int, int> square = (x => x * x);
宣言していない変数が有るぞ?
ところで、上記コードのx
という変数は一体どこで宣言されているのでしょうか。
型名もvar
キーワードもありませんが、実は任意の変数名を書いただけで宣言も済んでいます。
ラムダ式におけるパラメーターは型の記述を省略できる(事が多い)のですが、これが初めは混乱の元でした。
(for
ステートメントやforeach
ステートメントのようにvar
キーワードを使う仕様なら、もっと分かりやすいのになと思ったり……。)
下記のようにあえて型を明記すると、この命令文の意味はより分かりやすくなります。
Func<int, int> square = (int x) => x * x;
型を明記するにはかっこが必要なのですが、これによって下記のような「パラメーターを持たないラムダ式」とも統一感が取れます。
Action line = () => Console.WriteLine();
まとめ
他にも苦手としていた理由はあったと思いますが、取りあえず思い当たる2つの理由を挙げました。
これらを理解する過程で、私は以下のような表記をするようになりました。
Func<int, int> square = ((int x) => x * x);
文の区切りが分かりやすく、パラメーターの宣言も明確です。
難点としては無駄なかっこが多い事で、これはIDEでも削除を提案されます。
克服してみれば、冗長に感じてしまうのも事実です。
ですが私と同じ理由でラムダ式を苦手とするかた向けに、当ブログでは上記のような記法を採っております。
以上、私がラムダ式を苦手としていた理由と対策法でした。