【C#】ラムダ式の使い方(書き方)

スポンサーリンク

今回はラムダ式を紹介するよ~!正直、ラムダ式で書かれたソースコードを読むのはすごく苦手です。。。
ただ知っているとソースコードが簡潔に書くことができて、スッキリとしたコードになったります。
今回の紹介するサンプルは『匿名メソッド(無名関数)の時に紹介した匿名メソッドをラムダ式で書いたらどうなるか』を紹介していきたいと思います。
ラムダ式に慣れる為の大きな1歩です!!

ラムダ式とは。。。

簡潔に説明すると「かんたん関数記法(書き方)」です。
ラムダ式とは、delegateのようなキーワードをより短く表すための記法なのです。

書き方としては《 左辺 => 右辺 》という書き方になり、
左辺は引数を書きます。
右辺には、式 or 文を書きます。文の場合は{}でくくる必要があります。

使い方

[戻り値なし/引数なし]の匿名メソッドをラムダ式で記述する場合

例として、『Label1のテキストを空表示する』匿名メソッドを書いてみました。

delegate { label1.Text = ""; }

これをラムダ式で記述してみます。

() => { label1.Text = ""; }

左辺には引数を記載します。今回は引数なしなので、『()』のみになります。

[戻り値なし/引数あり]の匿名メソッドをラムダ式で記述する場合

例として、『引数mesをLabel1に表示する』匿名メソッドを書いてみました。

delegate (string mes) { label1.Text = mes; }

これをラムダ式で書き換えます。

(string mes) => { label1.Text = mes; }

[delegate]を無くして[=>]が追加されました。
さらに省略していきます。

(mes) => { label1.Text = mes; }

左辺の型を省略する事は可能です。型を省略する事は多いようです。
引数が1つの場合、さらに省略可能です。

mes => { label1.Text = mes; }

左辺の()を省略する事はあまりオススメしませんけどねw

[戻り値あり/引数なし]の匿名メソッドをラムダ式で記述する場合

例として、『Label1のテキストを取得する』匿名メソッドを書いてみました。

delegate { return label1.Text; }

これをラムダ式で書くと、

() => label1.Text

上から読んでいる人は、慣れてきていると思うので説明は省略。

[戻り値あり/引数あり]の匿名メソッドをラムダ式で記述する場合

例として、『引数mesをLabel1のテキストに代入し、Label1を取得する』匿名メソッドを書いてみました。
いままでのラムダ式の右辺は《式》で書いていましたが、今回は《文》で書きます。
《文》になった理由としては、処理として2行になってしまったからです。

delegate (string mes) { label1.Text = mes; return label1.Text; }

この内容をラムダ式で記載します。

(mes) => { label1.Text = mes; return label1.Text; }

このように《文》になる時は {} で括る必要があります。

サンプルの作成

前回まで作ったプロジェクトを変更していきます。
今回は、匿名メソッドで作成したbtnResetの処理をラムダ式で書き直したいと思います。

全体のプロジェクトが分かるのは、下記記事
【C#】デリゲート(delegate)の使い方 | 育児パパの人生備忘録 (t19488sns.com)
その上から、匿名メソッドに変更したのが下記記事
【C#】匿名メソッド(無名関数)の使い方 | 育児パパの人生備忘録 (t19488sns.com)

操作画面

簡単にコントロールの説明

textBox1  :入力文字
btnGetRow  :行数を取得する。取得した内容はlabel1に表示する。
btnGetLength:文字数を取得する。取得した内容はlabel2に表示する。
btnBoth   :行数&文字数を取得する。取得した内容はlabel1/label2に表示する。
btnReset  :label1/label2の表示を空白にする。
label1   :行数表示用
label2   :文字数表示用

定義

事前に関数を作っています。(過去記事から修正なし)

private void test(string dt, Action<string> proc)
{
    proc(dt);
}

処理の紹介

リセットボタンの処理

リセットボタンのクリックイベントの処理を紹介します。
匿名メソッドで書いた分は、コメントにして比較できるようにします。

private void btnReset_Click(object sender, EventArgs e)
{
    //label1.Text = label2.Text = "";
    //test("", delegate (string d) { label1.Text = label2.Text = d; });
    test("", (mes) => label1.Text = label2.Text = mes);
}

実行結果

特に目に見える変化はありません。という事は、同じ処理が出来ている証拠でもあります。

まとめ

ラムダ式の記載方法について紹介しました。
delegateを使った書き方に比べると、文字数が少なくなっているのが分かります。
記述として、《左辺》=>《右辺》の形になることを覚えておきましょう。
また、[《左辺》は、引数 / 《右辺》は、式 or 文 ]である事を覚えておきましょう。

他にもラムダ式で書くと簡潔に記載できる事があります。
ただ、自分は正直苦手意識が大きいです。
ただこうやってブログで紹介する事で理解を深める事が出来ています。
記載方法なので、慣れの部分が大きいです。いっぱい使用して慣れていくしかありません。
人が書いたソフトを読み解く機会が多い人は、慣れておいて損はないと思います。

コメント

タイトルとURLをコピーしました