ネタ元
私もハンガリアン記法は好きではありません。
理由は「ほとんどのハンガリアン記法は既存の型のことしか考えてないから」です。
とある ASP.NET のプロジェクトではハンガリアン記法が採用されていたのですが、こんなルールがありました。
- ユーザーコントロールのプレフィクスは uc
- カスタムコントロールのプレフィクスは継承元のコントロールと同じ
ハンガリアン記法とは、一目で型を知れるのが利点なんじゃないんでしょうか?
型を知れば、振る舞いや扱い方を想像することができます。
uc とついてればユーザーコントロールなのは理解できます。
具体的にはどんな型なのでしょうか?役割は?ボタンですか?リンクですか?
そこから振る舞いや扱い方を想像できますか?
カスタムコントロールを継承元と同じプレフィクスにしたら、混在したときにどうするんでしょうか?
どう考えてもハンガリアン本来の役目を果たしているとは思えません。
コントロールから抜けて、新規にクラスや構造体を作ったとします。
そのつど、プレフィクスを決めなければなりません。
時間の無駄です。
既存のデータ型しか扱わず、それだけで成り立っていたころはハンガリアンは便利だったかもしれません。
しかし、型を増やせば増やすほど崩壊していくハンガリアンは、現在主流のオブジェクト指向やコンポーネント指向と親和性が低いように思われます。
ネーミングルールやコーディング規約は採用する技術によって様々です。
たとえば私が最近勉強している Ruby では変数の最初の文字が @ だと private フィールドになります。
最初の文字が大文字だと定数として扱われます。
そんな環境ではさすがに @m_Name とかしませんよね?
コーディング規約というものは、技術を選定したときにたいてい新たに書き起こされます。
そんな時にわざわざ別の技術で使用していたルールを持ってくるのは不自然です。
せっかく新規に技術を選定したわけですから、社内標準ではなく、もう少し目を広げて一般標準を取り入れてほしいものです。
いくら、それまで社内標準だったとはいえ、教育コストがそんなに低くなるとは思えません。
デファクトスタンダードを採用することによって、それこそ中途参加者や新規参入者への教育コストが低くなると思います。
そもそも、ほとんどのハンガリアン利用者は、それがデファクトスタンダードだったから利用しはじめたんじゃないんでしょうか?
つまるところ、ハンガリアンがどうこうではないのです。
技術を取り入れる際に、仕様や手法だけでなく文化も取り入れようということです。
ほとんどは、これから文化を作り上げるパイオニアではないのです。
あらゆる会社がデファクトスタンダードを利用すれば、きっと幸せです。理想論ですが。
[追記]ここでいうハンガリアンはいわゆるシステムハンガリアンを取り上げています。
[追記]とか言っていましたが、
自分がシステムハンガリアンを好んで使用していました。