VB6.0以前はむしろマイクロソフトの資料やヘルプなどでも多用されていたハンガリアン記法*1ですが、Visual Studio.NET 2003が出たときにマイクロソフトはサンプル等からこの記法を一掃しました。もちろん、マイクロソフトが言うから、という理由ではなく、それなりに理由があるためほとんど使われなくなったこの記法について、なぜ無駄なのかを自分の周囲における状況や、過去の体験ベースでまとめてみようと思います。別に、学術的な考察でも何でも無いので異論反論あるかと思いますが、その辺は適当に解釈してください。
理由
- 区別する必要が無いものを区別するのは無駄。.NETでは登場するソースのかたまりはほとんどがクラスなので、クラスソースファイル名の頭に「Cls」等つける意味が無い。
- フォームクラスも所詮はクラス。フォームクラスは若干特殊だが、それもVisual Studio上でアイコン等が異なるため、誤読することはない(Frm、と頭に付ける方式に対して)。
- 環境が進化洗練されているのに古い環境想定の仕組みを使うのは無駄。高機能なツール、広いディスプレイがある状況で、変数の型を文字で付記するのは無駄。別の方法で確認はいくらでもできる。
- Long型などを表しがちな「エル」などはむしろ数字の1と混同する
- Visual Studioでマウスを合わせたり定義参照すれば型名などすぐわかる。
- 開発プラットフォームを提供しているマイクロソフト自体も推奨していないのにそれを使い続けるのは無駄。これはMSに追従しろという話ではない。MSが推奨していないということは、無理にハンガリアンを導入することで標準やサードパーティライブラリ、自社内でのソース流用時に規約がバラバラになる可能性がある。
- 他で使っているライブラリや製品を使った場合に、命名規則が混在してむしろ混乱しやすい。
- 他の開発者が入ってきたときに、この案件でのルールを覚える手間がでる。
- 変数宣言だけでなく型に合わせて名前まで変えないといけないなんて無駄すぎる。変数の型が変わったときや大きな変更を入れた際に、変数名の先頭についた型名文字列を直し忘れてむしろ混乱するケースが過去にあった。
- 直すべきは宣言上の型だけで十分。名前まで変えないといけないのはむしろ変更開発を行うことになった際に障壁になる(変数やクラス名の変更はコストが大きい)。
末尾のリンク先で他の人も言っていますが、自分が扱っているソースのメソッド内などでスコープや型をプリフィックス(接頭語)に書かないと「いけない」状況というのは、なにか他の根本的な問題を抱えている場合が多いと思います。
逆に、メリットは無いのか?
指摘ばかりは不平等なので、メリットも探しましょう。上記文中にもヒントを書きましたが、以下のような場合は(仕方なく)ハンガリアン記法もありだとおもいますよ。あくまで、自分用の「マーク」として、くらいのとらえ方が無難だと思いますが。結局のところ、「ルールを周知徹底させるコストに結果が見合うか」なんですよね。
- 貧弱な開発環境。
上記のようなケースでは、たいてい変数の型数も少なくシンプルであることが多いので、ハンガリアン記法にしても略記対応表を作るまでも無く、読み解けたりします。要するに、ケースバイケースです。こういうのが向いているなら使えばよい、向いていないなら、むしろ使うことで手間が出るならやめるべき、それだけのことですね。
ホントのハンガリアン記法は?
本当のハンガリアン記法は、型ではなく「意味」に相当するものを付記して、誤読や誤用を回避したり、ミスを発見しやすくするためのものだったようですね。たとえば……
- 訂正前のデータと訂正後のデータを接頭語で区別する。
- 座標値を表す変数に接頭語でX軸、Y軸を判るようにする。
- 顧客情報の種類を接頭語で業務的に分類する(保険契約者と被保険者、など)。
のような感じですね。プログラミング言語のデータ型とは別の観点での、言語ではなく、プログラムが遂行する作業環境上での「種類」を分類する、これは有りだと思います。
他での議論
この話題は2002年頃から繰り返されています。よそでの議論を覗いてみましょうか。
- システムハンガリアン記法は時代遅れ?/一般システムエンジニアの刻苦勉励
- http://blogs.itmedia.co.jp/yohei/2008/04/post-fcac.html
- 昔の"常識"、今の"非常識"/ITPro 記者の眼(文中に言及あり)
- http://itpro.nikkeibp.co.jp/free/ITPro/OPINION/20031002/1/
- ハンガリアン記法の利点と欠点
- http://july.dyndns.info/varietywiki/index.php?%A5%CF%A5%F3%A5%AC%A5%EA%A5%A2%A5%F3%B5%AD%CB%A1%A4%CE%CD%F8%C5%C0%A4%C8%B7%E7%C5%C0
.NETのクラスライブラリ設計 開発チーム直伝の設計原則、コーディング標準、パターン (Microsoft.net Development Series)
- 作者: Krzysztof Cwalina,Bard Abrams,藤原雄介
- 出版社/メーカー: 日経BPソフトプレス
- 発売日: 2009/12/24
- メディア: 大型本
- 購入: 10人 クリック: 603回
- この商品を含むブログ (33件) を見る