December 2024
Beginner to intermediate
164 pages
1h 15m
Japanese
コードは有機的に成長する。「有機的」という言葉を軽蔑の意味で使う人もいるが、私にはわからない。将来必要となるすべてのコードを一度に書くことはできない。それができるのは、私たちが何も学ばなかったときだけだ。
有機的に成長するなかで、同じ問題であっても、取り組む時期や人が違えば別の形で解決されることがある。それは構わないが、読むのが難しくなる。読み手としては、一貫性が欲しい。パターンが見つかれば、起きていることを理解しながら、安心して結論までジャンプできる。
変数の遅延初期化の例を見てみよう。違う方法で書いてあるのがわかる。
foo()
return foo if foo not nil
foo := ...
return foo
foo()
if foo is nil
foo := ...
return foo
# トリッキー
foo()
return foo not nil
? foo
: foo := ...
# 代入が式であると仮定すると、二重でトリッキー
foo()
return foo := foo not nil
? foo
: ...
# 条件が隠されていて、もっとトリッキー
foo()
return foo := foo || ...
もっと別の形を発見、発明できるか考えてみよう。
どれも「まだ値が決まっていないfooの値を計算してキャッシュする」方法だ。どの方法にも善し悪しがある。読み手はどの方法でもすぐに慣れるだろう。混乱が起きるのは、2つ以上のパターンが同じように使われる場合だ。読み手は、違いは違いであることを期待する。違いは、同じことをしているという事実を覆い隠すのだ。
やり方を1つ選ぼう。他もそのやり方に合わせよう。不要なバリエーションを1つずつ整頓していこう。たとえば最初に遅延初期化に取り組んでみるのはどうだろう。 ...
Read now
Unlock full access