• ベストアンサー

ハンガリアン記法は廃れた?

マイクロソフトでは、いわゆるハンガリアン・スタイルの記法はすでに廃止されている、と以前何かで読んだ記憶があるのですが、ほんとうでしょうか? また、ハンガリアン記法の問題点を教えてください。 私なりの考えでは、 ・仕様変更でオブジェクト型の変更が必要な場合、識別子も変更しないと、名前と実態が一致しなくなるため、不都合。→ 柔軟性に欠ける。 ・識別子の文字数が、接頭辞の分だけ長くなり、冗長。 といったところなのですが、これであっていますか? 補足、訂正等ありましたらご指摘頂けると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • davidname
  • ベストアンサー率40% (4/10)
回答No.1

細かい所では ・型・クラスが増えると意味をなさない ・知らない人には暗号のように見える ぐらいでしょうか。 ちなみにVS.NETよりMSはハンガリアン記法を止めました。恐らく前者が原因でしょう。個人的にはC/C++で書くならポインタのpはほぼ必須だと思いますけどね^^;

BuXiangHua
質問者

お礼

コメントありがとうございます。 言われてみれば、仰る通りで、別に難しい理屈ではありませんでしたね。 VB (6.0以前) 限定なら、デメリットよりメリットのほうがかなり大きいのですが。 (フォームのコントロールに txt,lbl,cbo,cmd といったプリフィックスを付けるだけで、可読性、開発効率の向上という恩恵が得られるので) この種の議論は、ともすれば不毛な感情論、宗教論争に発展しがちですが、全否定、全肯定に陥らず、利点/欠点の両方を客観的に受け入れて、利点をできるだけ活かすのが望ましいのだと思います。 ありがとうございました。

BuXiangHua
質問者

補足

Resが大変遅くなり、申し訳ございません。 > ・型・クラスが増えると意味をなさない 当方、VB (6.0以前)、VBAしか使用経験がないため、この点を失念しておりました。 VB6.0製のAPでは、再利用性や部品化を意識した、「出来のよい」(と思われる) プロジェクトでも、クラスモジュールの比率はそんなに高くないのです。

その他の回答 (1)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

ハンガリアン記法が廃れる理由は、質問者さんや#1の方の回答の通りだと思います。 以下は補足です。 C++では詳細な型はもちろん、算術型・ポインタ型・関数型等の区別も、意味的にはかなり曖昧になっています。 というのも、ポインタと同じように扱える型には、生のポインタもあれば、std::auto_ptrやboost::shared_ptrのようなスマートポインタもあり、イテレータもあるわけです。算術型も関数形式のキャストができますし、関数型とファンクタも似たようなものです。 特に、テンプレート内ではまったく別の型が同じものとして扱われますから、あえて区別するのは自由度を下げるだけであまりメリットはありません。

BuXiangHua
質問者

お礼

コメントありがとうございます。 C++やC#、Java等では、VB (6.0以前に限定) のようには上手くいかないようですね。 (VBでもすべてのカスタムコンポーネントにプリフィックスを割り当てるのは不可能に近い?) 個人的には、全否定するのではなく、利点になる部分のみを活かすことは不可能ではないと思っています。 (例 : 文字列と数値の区別、各種コントロール種別の区別) ありがとうございました。

関連するQ&A