名前を付けてやる - Code Complete

元々はhttp://d.hatena.ne.jp/minekoa/20090503/1241359991への返答だけど、内容はそれ以外でも通用するはず。

例えばの話。

佐藤太郎さん(48才、サラリーマン、妻子持ち)の話。
妻は「あなた」と呼ぶ。息子は「オヤジ」と呼ぶ。同僚は「係長」と呼ぶ。社長は「佐藤」と呼ぶ。また名前とは別にIDも持っている。免許証番号は123xxxxx、保険証番号は456xxxxx、従業員番号は789xxxxxだ。
名前は単なる識別子にすぎないというのはある意味で正しい。それでは想像してほしい。

  • 息子から「おい、太郎」と名前で呼ばれたら?
  • 同僚から「おはよう、あなた」と親しげに呼ばれたら?
  • 妻から「ねえ、456xxxxx」と保険証番号で呼ばれたら?

どれも不穏な空気を感じないだろうか(それぞれ別の意味で)。
呼び名には「相手との関係」が込められている。だから人や物に名前(本名でも渾名でも)を付けるときは「相手に期待する関係」を込めていることになる。似た名前を付けるということは似たものだとみなしていることになるし、特別な名前を付けるということは特別なものだとみなしていることになる。

ここからはプログラミング言語の話。

日常生活では滅多に名前を付ける機会がないため、名前の重要さを感じにくいのかもしれない。しかし、プログラミングでは大量の名前を付けなくてはならないため、名前付けの巧拙がはっきりと見えるようになる。
例えば、変数の命名では次のような慣習がある。これらを守ったソースコードは読みやすいが、守らないソースコードは読めたものではない。

  • foo,barのような名前ならその変数は重要でない。
  • is_aliveという変数なら(何か)の生死を真偽値で表す。
  • url_of_amazonという名前ならamazonへのURLだろう。これは文脈によってamazon.comかもしれないし、amazon.co.jpかもしれない。
  • url_of_amazon_japanという名前ならamazon.co.jpだろう。もし将来、URLがamazon.jpやjp.amazon.comに変わったとしても対応できる。

こういった名前の重要さについて丁寧に書いてある教科書として『Code Complete』がある。他にも実例が載っているので参考にしてほしい。