- - PR -
ハンガリアン記法について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-11-10 10:18
.NETでは、ハンガリアン記法が推奨されていないようですが、なぜなのでしょうか?
どのようなデメリットがあるのかご存知の方教えてください。 よろしくお願いします。 変数に接頭語を付けた方が、その内容がわかりやすくなると思うのですが... Microsoft 静的フィールドの名前付けのガイドライン http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpgenref/html/cpconstaticfieldnamingguidelines.asp | ||||||||
|
投稿日時: 2003-11-10 10:50
・すべてはオブジェクトでそのオブジェクトごとに接頭辞を付けようがない。 ・基本型(整数、実数、文字列等)にだけ接頭辞をつけるとしてもこの型名も言語ごとに異なる。 という点から付けられない、というのが一つの理由でしょう。 Publicなメンバは基本的にガイドラインに沿った方がいいと思います。
メソッド内のローカル変数なら、メソッドが十分小さくまとめられていれば、 (現実にはひどいソースコードが多いので・・・まとまってなかったりしますが) 変数の型は宣言を見ればいいだけですし、それほど効果がないと思います。 言語仕様としてスコープを最小にできる場合は、 変数の宣言もメソッドの先頭ではなく、ブロックの先頭で行うようにします。 Privateスコープのものは、プロパティを見れば型もわかりますし、 特に接頭辞が必要ということもないでしょう。 (文字列や整数のプロパティだけじゃないので、基本型だけ接頭辞を付けてもちょっと中途半端) | ||||||||
|
投稿日時: 2003-11-10 10:58
よねKENさんと一緒になるのかな? 新しいクラスを定義して、そのクラスごとに接頭辞をつくります?それこそ、接頭辞のルール作りが必要で、混乱するだけと思いますけど。 | ||||||||
|
投稿日時: 2003-11-10 11:18
> Microsoft 静的フィールドの名前付けのガイドライン
のURLで開いたページの左のツリーの少し上に「型名の混乱の回避」が 説明されてます。そういうことなのでしょう。 | ||||||||
|
投稿日時: 2003-11-10 16:39
なるほど、そういう理由だったのですね。勉強不足でした。
返答をくださったみなさん、ありがとうございました! | ||||||||
|
投稿日時: 2003-11-10 17:13
ハンガリアン記法については賛否両論ありますね。
私はハンガリアン記法を好んで使っています。立場的な事もあると思いますが、変数・オブジェクト名の 命名規則をプログラマ任せにしたくない、というのがあります。ハンガリアン記法にそった命名基準が あれば、ある程度決まってしまう為、名称はそれほどぶれません。 開発の規模が大きくなりプログラマの数が多くなればなるほど、プログラマの資質の差から生じる品質の 幅は大きく、そういった基準を課す事で、少しでも可読性が上がる事が期待できるのであれば、採用するに 越した事は無いと思います。 一つのコードを一人の人が作り上げられる事ができれば勿論いいのですが、現実問題として、複数の人間の 手が入ります。すばらしいプログラマが作ったすばらしいコードを、そうでない人がそうでなくするリスクを 減らせる一つの手段だと思います。 オブジェクトの名称がEmployeeLstとあって、人によってはドロップダウンリストだったりリストボックス だったりDataListだったりするのは、コードの品質を下げる要因ではないでしょうか?ドロップダウンリスト はDdl、リストボックスだったらLstとポストフィックスを付ける、という基準を作るとしたら、名称を見る だけで型が分かるという意味ではハンガリアン記法ですし。 P.S. マイクロソフトが嫌いだから前はハンガリアン記法は嫌いで、今は推奨していないから好んで使う、 などというワガママ者も・・・・ | ||||||||
|
投稿日時: 2003-11-10 17:48
unibon です。こんにちわ。
これはコーディング標準としては良く分かります。
ちょっとチャチャになりますがこれを「ハンガリアン記法」と呼ぶのならば、 変数名を、従業員の名前だから EmployeeName としたり、 従業員の住所だから EmployeeAddr などとするのも 「ハンガリアン記法」に含まれてしまうような気もします。 したがって、どこまでが「ハンガリアン記法」なのかという 境界の定義も必要かもしれません。 つぎのものが思いつきますが、 私としては(1)くらいまでがハンガリアンなのかなと思います。 でも、検索すると(2)もハンガリアンらしい。 (1) ビット幅やポインタかどうかの区別用。 (2) コンテナかどうかやその種類の区別用。 (3) コントロールの区別用。 (4) ビジネスロジックのための識別用。 | ||||||||
|
投稿日時: 2003-11-10 22:22
>.NETでは、ハンガリアン記法が推奨されていないようですが、なぜなのでしょうか?
>どのようなデメリットがあるのかご存知の方教えてください。 メンテナンスが面倒.接頭辞があてにならない.バグの原因にさえなる. 短い使い捨てのプログラムならいざ知らず,長期間使う実用的なプログラムには向いて いません.「ロングポインタ」なんて単語が死語になってもなお,"lp"から始まる変数が 残ってるOSの話を聞いたりすれば,ハンガリアン記法が廃れたのも理解できるというもの. ましてやポリモフィズムを使ってると,ハンガリアン記法なんてほとんど無意味です. |
1