命名規則のガイドラインは注意する価値がありますか?


13

.Net規則を使用して変数に名前を付けます。

  • 変数とフィールド用のcamelCase(クラスのプライベートフィールドには_camelCaseを使用する傾向があります)
  • メソッド、プロパティ、クラスのPascalCase

私が逸脱する唯一の場所は、実際にJava SCREAMING_CAPSスタイルを好む定数と列挙です。

私の会社のコードベースには、VB6とVBScriptの疑似ハンガリー表記スタイルが散りばめられています。

  • 文字列の場合はsまたはstr
  • Intsの場合はiまたはint
  • dは10進数(または場合によっては2倍)
  • oまたはあらゆる種類のオブジェクトのobj

そのコードスタイルが他の人のコードで使用されているのを見たときはいつでも(レガシーフィールドだけでなく、グリーンフィールドコードでも)私はうんざりし、自分でそのスタイルを使用することを拒否します。過去に.Net命名規則を標準化してきましたが、無視されました。ハンガリー語表記で書いている人はそうし続けています。私が好きではない人は自分のスタイルを使い続けています。標準化を行うと(私それを押し続けますが、誰も気にしないようです)、それはハンガリーの表記法であり、推奨される方法ではなく、そのようなコードを書くことを余儀なくされることを少し恐れています。

これに関して、モグラ塚から山を作っていますか?コードに説明的な名前ではなく冗長な識別子が散らばっているかどうか気にせず、独自の方法を使い続けて標準になるようにプッシュする必要がありますか?


2
良い質問。命名規則は、邪魔するのではなく、助けるためにあります。彼らが邪魔するとき(元の目的がもはや関係ないため)、それらを捨てます。
ゲイリーロウ

回答:


7

あなたが気にするべき唯一のことは、人々が物事を少し掃除することを気にしないチームで働いているということです。それはとても悲しいです。

あなたがしていることをして、モダンなスタイルを使い続け、人々にそれを採用するように(しかし彼らを強制しないで)招待してください。もちろん時間がかかります。しばらくすると、どこに行くのか、次に何をするのかがわかります。

PSこの問題に関する会議を開催し、関係者全員を招待してはどうですか。その後、彼らは十分に注意を払い、問題を示し、アプローチを提示します。それは彼らに考えることを与えます。おそらくあなたの地元の試みから、彼らはあなたをあまり真剣に受け止めていません。


+1最近の名前変更リファクタリングは非常に効率的で、変更を加えた場合の影響にほとんど気付かないでしょう。
ゲイリーロウ

2
悲しいことに、私のチームの人々はそれを使用すらしていません。名前が誤解を招く場合でも、名前を変更することを恐れています。たとえばSendNewCustomerEmail、新しい顧客のメールだけでなく、あらゆる種類のメールを送信するために使用されるメソッドがあります。現在の開発者から「この名前は誤解を招くことに注意してください」というコメントがありますが、実際にもっと一般的で便利な名前に実際に名前を変更することを考えた人は誰もいません。値を追加する代わりに変更する必要のないコードを変更しています。
ウェインモリナ

3

ハンガリー記法が個人の出力/品質に影響を与えているのか、それとも自我を傷つけているだけなのかを自問する必要があると思います。自我とは、物事は一般的にはうまくいくという意味ですが、外部から尊敬する誰かに恥ずべき時代遅れのコードを見ることは決してありません。懸念には独自のメリットがあると思いますが、切り替える必要のあるすべての人が受ける品質/生産性の低下と比較検討する必要があります。

これは一種の技術的な負債の質問です。このスタイルのハンガリー語は.Netで意味をなさないことは明らかであるため(「I」とのインターフェースを除き、それはまた別のことです)、これは一種の可能性がありますそれが自然に消えるまであなたのチームが耐えられる技術的負債


4
「I」という接頭辞も気にせず、それを使用するのは、Javaの難問、たとえば、名前が付けられたインターフェースCustomerRepositoryやクラスなどのJavaの難問を避けるためCustomerRepositoryImplです。
ウェインモリナ

3
+1-より良い方法があるはずです。私は時々「ハンガリーの光」を使用しますが、接頭辞は常にタイプ関連ではなくビジネス関連です。たとえば、経理のすべてにAP側とAR側があり、多くの場合、請求書などの同じ名前が付いています。ARInvoiceとAPInvoiceを持つことは、私にとって完全に合理的だと思われます。ハンガリー人は常に悪いわけではありません。
モーガンハーロッカー


あなたが言ったように、XMLのXml代わりに接頭辞を使用するコードを持つ同じ行に沿って、人々が知っている明確に定義された略語を持つビジネスの意味だからExtensibleMarkupLanguageです。会計モジュールでは、私はでしょう期待のような請求書のオブジェクトを参照するarInvoiceと、apInvoiceビジネス・コンテキストを伝えるが、見objArInvoiceたりoApInvoiceIMOちょうど愚かです。それはもっと悪いかもしれないclsApInvoice、実際のクラス名の
ウェインモリナ

1
@ironcode:実際には、Apps Hungarian Notationと呼ばれるもので、Systems Hungarian Notationと比べてはるかに優れています。ほとんどの人は残念ながらシステムを使用しています。en.wikipedia.org/wiki/...
三木ワット

2

ハンガリーの表記法に対する最善の議論は、現代のIDEに加えて、色、変数の種類、可視性、その他の要素を、小さなシンボルと、掃除中のツールヒントテキストで示す多くのメソッドを持っていることです。

  • (b)ool(f)loat(c)har(l)ong(s)hort(Stringと競合しますか?no:(S)tring)、(v)oid。
  • 可視性のエンコードを奨励します。私はJavaland出身で、.netにも適合することを願っています。(pri)vate、(pub)blic、(pro)tected(def)aultを使用する必要があります。
  • .netにはfinal / constがありますか?プレフィックスにしてください!「揮発性」と聞こえますか?
  • なぜintとlongはプレフィックスを必要としますが、異なるオブジェクトは必要ありませんか?それは論理的ではありません。abbrev.tabを作成します。ここで、すべての新しいオブジェクトには個別の略語が付きます。
  • ヌルになる可能性のある変数など、ヌルであってはならない変数にもプレフィックスを付けることができます。賢い人は、DbC全体を変数のプレフィックスに入れます。

真剣に:リファクタリングでは、変数をintからlong、Stringからcharに変更できます。名前を変更する必要もありません。

IDEでは、多くの場合、横にあるボックスに名前が並べ替えられます。見つけやすい名前で並べ替えます。変数のほとんどがoまたはiで始まる場合、名前の重要な部分に到達するのは目にとって不穏です。

追加の文字は、変数の意味を乱します。整数の 'sane'は 'i_sane'を取得します。これは、 'insane'に似ています。

ハンガリーの表記法は、型システムのない言語で役立ちました。コンパイラーが特定の型を強制する場合、必要ありません。ハンガリーの表記法に関するラメントを共感的な「はい、古いプログラマーにとっては過去にそれを使用するのは理にかなっています!」とラメントを飾ると、それらの古いプログラマーは無駄になり、古いと特定されることを好まないかもしれません。

ただし、このテクニックが機能するためには注意が必要です。「高齢プログラマー」と話すときは、声を下げて、彼らに感じさせ、彼らにどれだけ注意を払っているか、どれだけ世話を必要としているかを教えてください。部屋の第三者があなたが何かを隠そうとしていることを認識するように、もちろん彼の好奇心を高めます。


悲しいことに、私もeSomeEnum場所で使用されるのを見てきました。ありがたいことに頻繁に。
ウェインモリナ

2

Framework Design Guidlinesのコピーを購入して、マネージャー(またはコーディングスタイルを管理する人)のデスクにドロップします。一貫性の重要性を強調する導入部を際立たせてポストイットノートを投稿してください。さらに家に帰るには、Clean Codeのコピーを入手し、コーディング規約に関するセクションにブックマークを付けます。


1

いくつかの点でこれは主観的な問題であり、それは私がしばらく楽しませてから回避するプログラミングのminutae(スペル?)討論の1つです。ハンガリーの記法は追放されるべき罪だと思いますが、一貫性がより重要だと思います。

その流れで、タイプベースの命名規則ではなく、ドメイン中心の変数命名を使用するようにチームを説得するために最善を尽くしますが、すべてが難しくなった場合は、全員が従わなければならない命名の標準を受け入れます。共通のコードベース。

私は、標準化グループによって課せられた一般的に義務付けられた標準には賛成しませんが、ソフトウェアチームは独自の標準を開発し、さらに重要なことに、それに固執しています。


1

リシャーパー変数の名前変更は非常に高速であるため、誤って考慮された命名規則を非常に早く取り消すことができるため、古い間違った見出しの規則をそのままにしておく必要はありません。

リファクタリングツールがない場合は、コードベースの既存の慣習をできる限り順守することを提案した他のコメント作成者に同意します。(ある時点まで、それらを許可するとバグジェネレーターに変わる変数命名規則があります)


0

あなたの懸念のほとんどは有効であり、新しい開発者とおそらくあなたの正気のために人生を楽にします。あなたがすべて採用すべき一つの規約は、説明的な名前です。スタイルがどれほど悪いかに応じてスタイルを大幅に変更することなく、そのことについてコンセンサスを得ることができるはずです。それ以外の場合は、担当するまで待つか、現在のメンバーを、自分のやり方を考えて感じる新鮮な開発者に置き換えてください。


0

私の逸脱:

  • _PublicPropertyBacker
  • _private_property_backer
  • _privateMember
  • CONSTANT_MEMBER
  • privateFunction
  • param_
  • プライベートボタンokBU; //等。3文字に制限
  • struct SOMESTRUCT //ピンボーク構造体用

汎用コード領域とファイルレイアウト:

  • 会員
    • (プライベート|内部|保護|パブリック)X [静的] X [定数/読み取り専用]
  • プロパティ
    • (プライベート|内部|保護|パブリック)X [静的] X [読み取り専用]
  • コンストラクター
    • (プライベート|内部|保護|パブリック)X [静的]
  • コマンド// voidリターンまたはステータスリターンのあるもの
    • (パブリック|保護|内部|プライベート)X [静的]
  • イベントハンドラー/ private /
    • (制御|リモート|サービス|その他)イベント
  • 関数//状態を照会し、副作用がないはずです
    • (パブリック|保護|内部|プライベート)X [静的]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.