ガード節とド・モルガンの法則
「ガード節による入れ子条件記述の置き換え」のリファクタリングは、異常系のチェックを先に行い、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;
}
// 正常系の処理
}
となります。ド・モルガンの法則を知っていれば、業務ロジックが分からなくてもガード節は作れます。
最初は難しいかも知れませんが、反復しているうちに使いこなせるようになりますので、がんばって覚えてください。
コメントはまだありません。