記述をラムダ式に置き換えていく方法

私のショートコードの書き方は以下のステップになっています。

  • まずは作成したい内容をベタ書きする
  • 同じ内容をまとめる
  • まとめた部分を別の表現方法で表現する

地道ですが、現状作っているコードを少しずつ手直しすることで、
短くしていくことができます。それも機械的に。
実戦でも使用可能なのでなかなか良いです。
その訓練を続けるうちに、最初から短いコードが書けるようになります。

これをやっていたら、以前から懸念していた引数にラムダ式を書くやり方も
同じやり方でできることに気づきましたので紹介します。

        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();
            }
        }

同じコードをまとめる、位置を変えるという機械的な作業をするだけで、
引数にラムダ式をもった関数が出来上がりました。
(ただのサンプルなので、上記コード自体に大した意味・優位性はありません。)
このやり方で書き換えを行うことで有効となる局面があります。

  1. No Comments