August 2023
Intermediate to advanced
452 pages
5h 11m
Japanese
ぼくらはみんな、新米プログラマーだった時に、特殊な解法よりも一般的な解法が望ましいと教わった。各問題に対して別々の関数を書くより、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)の著書『自然学』(邦訳は『新版 ...
Read now
Unlock full access