3

この質問が少し聞かれたことは知っていますが、見た目では、この質問に対する明確な「はい」または「いいえ」の答えはありませんが、それでも、何かについて少し混乱しています.

通常、私がプログラミングするときは、プレフィックスに関するいくつかの規則に従います。

  • m_メンバーの前で
  • プロパティの前の p_
  • s_ static の前
  • パラメータの前に a_
  • l_ ローカル変数の前

私は今、新しい仕事に就きましたが、コードで接頭辞が使用されていないことに気付きました。その理由を尋ねると、メンバー変数とローカル変数を追跡するすべての作業を IDE が行うとの回答がありました。今思うと、そうかもしれませんが、接頭辞の方が使いやすいのではないでしょうか?

たとえば、メンバー、静的、および「ロボット」という名前のローカル変数がある場合、メソッドを作成するときにそれを参照するのは面倒ではありませんか? これはおそらく非現実的な例ですが、非現実的な状況でも一貫して適用できる適切なルール セットを頭の中に入れておきたいと思っています。

この例は、ハンガリー語表記を使用することを正当化しますか?

長所/短所のリストを作成し、それについてさらに学びながら編集すると思います.

ハンガリー人に対する反論:

Class.RobotまたRobot

this.robot

robot

ハンガリー語は必要ありません。

カウンター:

まだ矛盾があります。ロボットは、さまざまな方法でさまざまなことを意味する可能性があります。一貫性を保つために、各 Robot 変数の前に Class または this のプレフィックスを付ける (または何も付けない) 必要があります。

その上、静的変数 Strawberry にアクセスしたいとしましょう。Strawberry という名前のメンバー変数が定義されていないことをどうやって知ることができるでしょうか? 見えない別のファイルで定義されている可能性があるため、予期しない結果が生じる可能性があります。これは IDE を介して表示されると言うかもしれませんが、IDE が伝えていることを見逃す可能性がある一方で、参照しているものを確認できるため、接頭辞を使用する方が優れていると私は主張します。もちろん this/Classname プレフィックスを使用することもできますが、そのようなものはハンガリー語表記を使用しないという目的を無効にします。

ハンガリー人に対する反論:

この規則違反は、フィールドと変数の命名にハンガリー語表記が使用されている場合に発生します。ハンガリー語表記の使用は C++ コードで広く普及していますが、C# の傾向は、変数の型に基づくのではなく、変数の使用目的を説明する、より長く、よりわかりやすい変数名を使用することです。

カウンター:

私が言及した接頭辞は、変数の型に基づくものではありません。実際、接頭辞は、変数が何に使用されるかを指定します。

ハンガリー人に対する反論:

Visual Studio などの最新のコード エディターを使用すると、変数またはフィールドの型情報を簡単に識別できます。通常は、マウス カーソルを変数名の上に移動します。これにより、ハンガリー語表記の必要性が軽減されます。

カウンター:

これは事実ですが、私自身は、エラーが発生しない限り、変数名の上にマウスを置いたことはほとんどありません。対照的に、ハンガリー語表記では、変数がクラス内のどこにあるかがすぐにわかります。

述べる:

Microsoft は、ファイル名にハンガリー語表記を使用することを推奨していませんか? インターフェイス ファイルの前に I を付けるのが慣習であると読みました。これはハンガリー語表記の形式です。これは上記の私の質問とは直接関係ありませんが、ハンガリー語表記が推奨される場合があるという点を提起しています。

4

5 に答える 5

10

いいえ、しないでください。コードが読みにくくなります。前に v_ があるすべての動詞と n_ のあるすべての名詞で英語を書いた場合、ほとんどの場合役に立たない情報を追加しながら、文を読みにくくします。

クラスが適切に設計されており、責任がほとんどなく、メソッドが短い場合、各変数が名前と使用されているコンテキストから何を意味するかを理解するのはそれほど難しくありません。それが明らかではなく、知る必要がある場合は、簡単に見つけることができます。変数名の上にマウスを置くか、[定義に移動] を押すだけです。

StyleCop には、ハンガリー語表記を使用すると警告するルールがあります。ルールの説明には、そのルールが存在する理由について少し説明があります。


  • TypeName FieldNamesMustNotUseHungarianNotation
  • チェック ID SA1305
  • カテゴリの命名規則

原因

C# のフィールドまたは変数の名前には、ハンガリー語表記が使用されます。

ルールの説明

この規則違反は、フィールドと変数の命名にハンガリー語表記が使用されている場合に発生します。ハンガリー語表記の使用は C++ コードで広く普及していますが、C# の傾向は、変数の型に基づくのではなく、変数の使用目的を説明する、より長く、よりわかりやすい変数名を使用することです。

さらに、Visual Studio などの最新のコード エディターを使用すると、通常は変数名の上にマウス カーソルを合わせると、変数またはフィールドの型情報を簡単に識別できます。これにより、ハンガリー語表記の必要性が軽減されます。

于 2011-11-30T23:36:24.457 に答える
4

いいえ、ハンガリー記法は使用しないでください。まず、1990年代です。次に、同僚から暴行を受ける可能性があります... ;-)

あなたのロボットの例:

Class.RobotまたRobot

this.robot

robot

ハンガリー語は必要ありません。

于 2011-11-30T23:32:48.823 に答える
3

誰もがすでにここに書いているように、答えはノーです。

まず第一に、質問で述べているように、実際にはハンガリー語表記法、またはその既知の変種を使用していません。

それでは、独自に作成したものであり、広く使用されていない命名規則を使用しているという問題から始めましょう。これは、新しい同僚のように、コードを現実の世界に公開するとすぐに問題につながります。あなたは、この接頭表記の非公開の 3 番目 (n 番目?) の変種を発明しているだけで、他の人に何か珍しいことを強制するすべての問題が含まれています。

さて、それは良い方向への変化ですか?あなたは正しいですか、他の人々はこれらの一連のルールから利益を得るために適応する必要がありますか?

ここでのコンセンサスは「いいえ」のようで、私は激しくその側にいます. ハンガリオン表記に関する標準的な議論を無視します (私はそれらを「完全に関連していない」として却下します):

  • 多くのことを意味する名前を再利用しないでください。まだ一般的と思われる 1 つの例外は、コンストラクターがフィールドと同じ名前の引数を取ることです。

    public Foo(文字列ロボット) { this.robot = robot; }

  • コード内の膨大な数の名前を管理するのに問題がある場合は、1 つの場所/スコープ内にそれらの名前が多すぎる可能性があります。コードの臭いを解決しようとしている(ここまでのコンセンサスによると、臭い)回避策

  • 繰り返しますが、あなたはあなたの慣習を使用しない人々のチームに参加します (そして、どうして彼らは - それはあなた自身の作成のようです..) そのチームに適応する必要があります. 個人の読みやすさについて議論することも、同僚に再考を求めることもできますが、同僚がそのスタイルに同意しない場合は、反対しないでください。あなたが正しく、彼らが間違っていると主張するなら、あなたは自分自身を惨めにするだけです. これにより生産性が低下しないようにしてください。

于 2011-12-01T14:19:48.747 に答える
2

しかし、一貫して適用できる優れたルールセットを頭の中で持つのが好きです

頭の中のルール セットよりも優れているのは、IDE/ビルド システム内のルール セットです。そのため、StyleCopをチェックしてください。

StyleCop を使用すると、コーディング ガイドラインを好きなように構成できますが、デフォルトでは、アプリのハンガリー語表記法に代わる一般的な方法が提供されます。

  • 田畑:this.myField
  • プロパティ:this.MyProperty
  • メソッド:this.MyMethod()
  • 静的:MyClass.MyStaticMethod()

スタックオーバーフローと他の場所の両方でコーディングスタイルのこの側面に関する無限の議論が見られるので、この質問は重複として閉じられると思います....

于 2011-11-30T23:42:28.893 に答える
1

私自身、私が従ういくつかの規則があります。現代のIDEがこのような多くのことを取り除いているのは事実ですが、それでも私は少しハンガリー人だと思います:)。私は使用しています:

属性の robot_ (ms は this.robot の使用を推奨していますが、このように私は this を忘れることはできません)
ローカル変数とプライベート/保護/内部メソッドの
camelCase パブリック プロパティまたはメソッドの PascalCase

そしてそれだけです:)。コードは、m_、a_、... など、非常に奇妙に見えると思いますが、非常に読みにくいと思います。VS のコードにカーソルを合わせると確かにヒントが得られますが、ある種の規則を使用することにはさらに利点があります。

つまり、ms でさえ、すべての非同期関数を Async で後置したり、すべてのインターフェイスの前に I を付けたりする際に、ある種のハンガリー語表記法を使用しています。

于 2011-11-30T23:40:46.103 に答える