Tsuの雑記¯\_(ツ)_/¯

主に製作メモ・備忘録として使用。製作したアプリのリンクもあります。

【C#】なぜ私はラムダ式が苦手だったのか【雑記】

私はラムダ式が苦手でした。

その理由について、改めて考えてみます。

docs.microsoft.com

上記リンク内のコードを例に挙げながら、御説明いたします。

区切りが分からないぞ?

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でも削除を提案されます。

IDEが無駄なかっこの削除を提案している画像
改めてIDEに指摘されると少し恥ずかしい

克服してみれば、冗長に感じてしまうのも事実です。

ですが私と同じ理由でラムダ式を苦手とするかた向けに、当ブログでは上記のような記法を採っております。

以上、私がラムダ式を苦手としていた理由と対策法でした。