ルール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.