アプリケーションハンガリアンの話

間違ったコードは間違って見えるようにする - The Joel on Software Translation Project

WYSIWYGワープロにはスクロールする画面があり、すべての座標はウィンドウに対する相対座標なのかページに対する相対座標なのか解釈する必要があり、どちらであるかによって話は大きく違うので、取り違えないようにすることが重要だ。

(中略)

間違って代入してもコンパイラは助けにならないし、インテリセンスは何も教えてくれない。しかしこれらは意味論的には異なっており、違ったように解釈し、違ったように扱う必要がある。そして一方を他方に代入するときには変換関数を呼ぶ必要があり、そうしないと実行時バグを目にすることになる。運が良ければね。

そういうことにならないように、
コンパイラから見ると同じ型なんだけど実は種類が違う」
というものに対して人間から見たといの種類を変数名の接頭子としましょう、
というのがハンガリアン記法の起源であり、
それは巷で言われているハンガリアン記法と違って有用なんだ、
という話。


この話を昼休みに始めて見て、「ほほう」と思ってたんだけど、
家に帰ってきて再度読み直してみると、なんか微妙に違った印象になってた。


結局たとえばC++では、その
コンパイラから見ると同じ型なんだけど実は種類が違う」
というものを出来る限り排除し、
「種類が違うものは違う型で宣言させて、コンパイラがエラーを出すことで静的チェック」
という感じになっているわけで、これを厳格に運用できるなら
ハンガリアン記法はやっぱり必要ないってことなのか? と。


まあそういうのを全部にわたって運用するのは
普通のスキルの人間には非常に困難で、
だから、現実的には、抜けのある型システムを運用しつつ
抜けていくところはアプリケーションハンガリアンで補完するという
そういう適度なやる気のなさがうまくいくんだ、ってことなのかねぇ。