記述をラムダ式に置き換えていく方法
私のショートコードの書き方は以下のステップになっています。
- まずは作成したい内容をベタ書きする
- 同じ内容をまとめる
- まとめた部分を別の表現方法で表現する
地道ですが、現状作っているコードを少しずつ手直しすることで、
短くしていくことができます。それも機械的に。
実戦でも使用可能なのでなかなか良いです。
その訓練を続けるうちに、最初から短いコードが書けるようになります。
これをやっていたら、以前から懸念していた引数にラムダ式を書くやり方も
同じやり方でできることに気づきましたので紹介します。
private void foo() { Color a = button1.BackColor; if (a == Color.Red) Console.WriteLine("aaa"); if (a == Color.Red) boo(); }
簡単ですがこのようなコードがあったとします。
同じ内容をまとめる作業を行います。
private void foo() { Color a = button1.BackColor; Func<Color, bool> f = x => (x == Color.Red); if (f(a)) Console.WriteLine("aaa"); if (f(a)) boo(); }
最初は関数内に定義したローカル変数ですが、だんだん関数外で設定したい要求がでてきます。
その場合、Color a を引数にする書き換えはとても簡単です。
このときに、Func f も、変数と同じと捉えて、引数に置き換えてしまうことができます。
ついでにif文が冗長なのでまとめておきます。
private void goo(){ Color a = button1.BackColor; Func<Color, bool> fa = x => (x == Color.Red); foo(a,fa); } private void foo(Color a, Func<Color,bool> f) { if (f(a)){ Console.WriteLine("aaa"); boo(); } }
同じコードをまとめる、位置を変えるという機械的な作業をするだけで、
引数にラムダ式をもった関数が出来上がりました。
(ただのサンプルなので、上記コード自体に大した意味・優位性はありません。)
このやり方で書き換えを行うことで有効となる局面があります。