ガード節とド・モルガンの法則

ガード節による入れ子条件記述の置き換え」のリファクタリングは、異常系のチェックを先に行い、returnや例外をスローすることで正常系の処理を単純化できますが、元のソースのつくりによっては非常にやりづらいリファクタリングです。
 
たとえば「年齢20歳以上、30歳未満の場合のみ登録する」といった処理があったとします。
 
        // 登録します
        private void Register(int age)
        {
            if (20 <= age && age < 30)
            {
                // 正常系の処理
                ・・・
            }
        }
 
このくらい単純な処理であれば正常系のif文だけでもいいかもしれませんが、たいていは複合条件になりますので、ここはキチンとガード節を作りましょう。
 
と簡単に申し上げましたが、正常系のif文から異常系のガード節を作成するのは難しい場合があります。
 
ここで有効なのが「ド・モルガンの法則」です。
 
ド・モルガンの法則

ド・モルガンの法則

 
手順としては「正常系を否定すれば異常系のガード節になる」ので、ソースを以下のように改修します。
 
        // 登録します
        private void Register(int age)
        {
            if (!(20 <= age && age < 30))
            {
                return;
            }

            // 正常系の処理
            ・・・
        }
 
これでは条件が複雑になっただけですので、ここに「ド・モルガンの法則」を適用します。
 
先ほどの図をプログラミング言語で表現すると、
 
!(A || B) == !A && !B
!(A && B) == !A || !B
 
となりますので、上記ルールに従って改修すると、
 
        // 登録します
        private void Register(int age)
        {
            if (!(20 <= age) || !(age < 30))
            {
                return;
            }

            // 正常系の処理
        }
 
ここまで分解できれば、後は条件一つずつ人間が分かりやすい形で表記すればよいので、
 
        // 登録します
        private void Register(int age)
        {
            if (age < 20 || 30 <= age)
            {
                return;
            }

            // 正常系の処理
        }
 
となります。ド・モルガンの法則を知っていれば、業務ロジックが分からなくてもガード節は作れます。
 
最初は難しいかも知れませんが、反復しているうちに使いこなせるようになりますので、がんばって覚えてください。

g h T
 4,281 Total Views

ADVERTISING

駅チカ!ホテル検索
全国の駅や目的地近くの宿泊施設を検索し予約することができます。最寄駅沿線からもホテルを検索できるので、アクセスのよいホテルを予約することが可能です。
  1. コメントはまだありません。

  1. トラックバックはまだありません。