2009-05-07 14 views
6

誰もが "アンダースコア、アンダースコアなし"という議論は純粋に哲学的であり、ユーザーの好みに基づいていますが、アンダースコアを持つintelli-senseはローカル変数からメンバ変数を非常に簡単に区別することができ、したがって具体的な利益をもたらします。メンバー変数のアンダースコア。 intellisense

には、すべてのメンバー変数にアンダースコアを付けるという利点がありますか?

答えて

21

はい - 一部の人にとっては、読みやすさが低下します。私は、さまざまな人がさまざまな方法で読んでいると信じています(たとえば、内部的なボーカリストや他の人たちはそうではありません)。私が読んでいるときにコードの「流れ」を妨げている人もいます。

私はあなたがして非常に可能性のいずれか、離れてローカルおよびインスタンス変数を伝える難しさを抱えている場合は、あなたの方法が大きすぎるか、あなたのクラスはあまりやっていると主張するだろう。それはもちろん、必ずしも当てはまるとは限りませんが、短いクラス/メソッドでは問題にならない傾向があります。

+1

私はこの接頭辞にアンダースコア接頭辞が良いアイデアだと思う人を紹介します。 –

+3

まあ、私はいつもアンダースコアを使ってきました。 1)より多くのタイピング2)誤って誤ってしまうこと3)アンダースコアはこれよりも読みやすい(私の視点から)。あなたの方法がどれほど小さいか大きいかにかかわらず、ローカルとクラスのvarsを明確に区別することは常に有益です – Jack0fshad0ws

+0

@ Jack0fshad0ws:それは確かに味の問題です。個人的には、私には流れの句読点があまりにも多くなります。私はどこにでも 'this.'を追加することを提案していませんでした - 私は構文や接頭辞で区別しません。ローカル変数とインスタンス変数を少し混乱させてしまった最後の時を思い出すことができません。メソッドを短くして名前を選択すると、論理オブジェクト状態の過渡的な情報を扱っているかどうかが明確になります。 –

7

アンダースコアを使用することは、その効果を達成する単なる方法です。重要なのはそれについて一貫していることです。それはあなたが常に「this.」と入力してそれを得ることができますしたいだけのインテリセンスなら

+0

でもMicrosoftは.NET Frameworkで一貫していません...;) – Siewers

13

OK、それは「_」よりもさらに4つの文字だが、インテリセンスは、あなたのためにメンバーが表示されます。

アンダースコアを使用し、チームでアンダースコアを使用する場合は、引き続き使用してください。他の人は "m _"を使用しますが、他のアイデアは他にもあります。私はStyleCopを使用しており、私のチームでは議論が終わったので、 "this"を使用します。ハンガリー語のスタイルまたはアンダースコアの接頭辞は使用されません。そして、私たちはもはやそれについてもう心配しません。それは有効な質問だとそれは尋ねる価値がある - -

[編集]これはあなたの質問への批判ではなく、この議論の廃棄物のdevのプロジェクトにあまりにも多くの時間。私はStyleCopについて何となく好きではありませんが、このタイプの議論を切り捨てるので、私はそれを喜んで使っています。真剣に、私はこの種のディスカッションがデベロッパーチーム全体を占める長い時間の会議に参加してきました。クレイジー。私はあなたの質問が有効であるが、これ以上、あなた自身の時間の苦渋を無駄にしないでください、と言うように、それは本当にあなたがいる限りあなたがそれを使用するよう選択したものを命名規則は重要ではありません:-)

+0

+1私は同意します。 – ChrisF

+0

プラス 'this.'は読みやすさを向上させると思います。構文強調表示により、プライベート変数を一目で分かりやすくすることができます。 – Cocowalla

3

それだけの価値はありません全体のプロジェクト。

+9

私はそれが重要であると信じています。たとえば、すべての種類のすべてのメンバーがプロジェクト名で始まる命名規則を持っていると、膨大な量のコードとコードが読み込まれてしまいます。一貫性は確かに非常に重要です。ちょっとしたことではありません。 –

5

アンダースコアはハンガリー語表記*の形式と見ることができますが、プレフィックスは意味を持つものの代わりに「魔法の文字」です。

プレフィックスの詳細については、memberまたはmbrまたはmのような接頭辞を使用します。時にはプレフィックスm_が使用されますが、アンダースコアはプレフィックスの一部ではなくセパレータとして使用され、.NETの命名推奨ではセパレータとして使用しないでください。

は個人的に私はそれが隠された意味を持つ接頭辞だ本家の、メンバ変数のためにアンダースコアを好きになってきました。他のプレフィックスと同じくらい名前を混乱させることはありません。

いつものように、標準を選択してそれに固執することは、あなたが実際に選択する標準よりも重要です。


*ハンガリーnotaitionはほとんどVBScriptのような弱く型付けされた言語で入力するが、本来の意図は、変数の他のプロパティを指定することであったので、メンバ変数のためにそれを使用すると、元に沿ってより多くのデータを指定するために使用されてきています意図。

2

これを使用します。私の意見ではどこでも可読性が低下しています。プライベートクラスフィールドのアンダースコア接頭辞は完全に受け入れられます。本当にひどい命名規則であり、intellisenseの正面入力であるハンガリー語のほとんどは手紙を加えたもので、あなたのリストを作成するための非常に速い方法です。 私はCSLA.NETを使用しており、多くのBOの例ではアンダースコアの表記法を使用しています。古い学校のC++やCの開発者にはあなたがそれが良い習慣ではないと思うのを恐れさせないでください。 - .NETには同じ問題がありません。良い例は、コンストラクタの引数を渡している:私の意見では

public MyObject(int field1, int field2, int field3) 
{ 
    _field1 = field1; 
    _field2 = field2; 
    _field3 = field3; 
} 

public MyObject(int field1, int field2, int field3) 
{ 
    this.field1 = field1; 
    this.field2 = field2; 
    this.field3 = field3; 
} 

よりも多く読みやすいですが、一貫性が最も重要な問題である他の場所で言われてきたとして、それは個人的な好みです。

関連する問題