読者です 読者をやめる 読者になる 読者になる

ゆとりーなの日記

日記的な事を書いて行くと思はれる

書籍に於けるハンガリアン再考

何だかんだでシステムハンガリアンでコードが書かれている書籍は結構あって最初なんだかなーと思っていたんですが、最近案外理があるのかもと思い出したのでさらっと書いておきます。
書籍って何だかんだで使える領域に制限があるので載せるコードは短く書けるにこしたことはないと思うんですね。頁数が節約できますからね。そういうわけで我々const教徒が変数に値を突っ込むときはほぼ必ずと言っていいほどこういう感じになってしまうわけですが、

const float hoge_huga_hage = hoge * huge / hage;

これをシステムハンガリアンで書くと

fHogeHugaHage = fHoge * fHuga / fHage;

となって結構節約出来る感じになります。場合によっては2行が1行で済む可能性もあるのでこれは大きいような気もします。
更に書籍の場合は変数の型をやスコープを調べるのが結構厄介だったりします。例えばあるクラスのソースコードを載せる場合、実際のソースコードではお気に入りのエディタを使えば変数の情報なんてのは一発で分かりますが、書籍の場合システムハンガリアンを採用していないとクラスの宣言とメンバ関数の定義が離れていた場合、定義の方で出てきた変数がなんなのかを前に戻って一々確認しなければなりません。場合によってはサポートサイトや付属CDにしか完全なコードが載ってなくて本の方には抜粋しかないなんて場合は絶望的です。メンバ函数の一部抜粋なんかの場合だと出てきた変数がメンバ変数なのかローカル変数なのかも分からないかもしれません。システムハンガリアンで書かれていれば、その変数を見ただけでメンバ変数なのかどうかや型が何なのかが分かって読みやすくなる訳です。

void CHoge::HogeHugaHage(int iHage) {
  m_iHage = hage; // ぱっと見ですぐ変数のスコープと型が分かる!
}

システムハンガリアンへの批判としてよく聞くのはソースコードの修正で型を変えたら変数名も変えなければいけなくてだるいというのがありますが、書籍の場合は載せるコードはほぼ確定しているでしょうからこれも問題にならなそうです。
というわけで書籍に載せるソースコードをシステムハンガリアンで表記するのは案外合理的なのかもしれないと思った次第です。