ルール4一般化には3つの例が必要

 ぼくらはみんな、新米プログラマーだった時に、特殊な解法よりも一般的な解法が望ましいと教わった。各問題に対して別々の関数を書くより、2つの問題を解決する1つの関数を書いた方がいいってわけだ。

 こういうコードを書くことはまずない1

1 訳注:【コード例解説】nullptrは、指しているオブジェクトがないことを示すnullポインターの値を表すC++キーワード。

Sign * findRedSign(const vector<Sign *> & signs)
{
    for (Sign * sign : signs)
        if (sign->color() == Color::Red)
            return sign;

    return nullptr;
}

 何故かと言うと、次のコードを簡単に書けるからだ。

Sign * findSignByColor(const vector<Sign *> & signs, Color color)
{
    for (Sign * sign : signs)
        if (sign->color() == color)
            return sign;

    return nullptr;
}

 こういう単純な例では特に、一般化っていう観点から考えるのは、自然なことだ。世界中の赤い標識(sign)を見つけなきゃいけないとしよう。プログラマーとしての自然な直感に従えば、任意の色(color)の標識を見つけるコードを書き、標識の色としてそのコードに赤を渡すことになる。自然は真空を嫌い2、プログラマーは1つの問題しか解決できないコードを嫌う。

2 訳注:「自然は真空を嫌う」は、古代ギリシアの哲学者Aristotle(紀元前384-紀元前322)の著書『自然学』(邦訳は『新版 ...

Get ルールズ・オブ・プログラミング ―より良いコードを書くための21のルール now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.