定数のC#命名規則?


419
private const int THE_ANSWER = 42;

または

private const int theAnswer = 42;

個人的には、最近のIDEでは、ALL_CAPSが奇妙に見えるため、キャメルケースを使用する必要があると思います。どう思いますか?


4
@mmiika:この例の「the」の意味は何ですか?「Hitchhiker's Guide to the Galaxy」のようですか、それともC ++コーディング標準から引き継がれていますか?(たとえば、Macintosh用の古いC ++フレームワーク、THINK C [およびそれ以降、Symantec C ++]は、ポインター/参照メンバーにプレフィックス「its」を使用し、スカラーメンバーに「the」を使用していました。)
Peter Mortensen

5
@ピーター、定数の値は42なので、ヒッチハイカーの銀河ガイドへの参照であると強く信じています。
Albireo、

@PeterMortensenそれは創造的です!しかし、itsEmployeeやitsCostumerのような名前は、誤解を招く可能性があるようです。
Camilo Martin


私は好むtheAnswer。以前はハンガリーの表記法のファンでしたが、私はそれを使用しないことを学んで以来、命名でメタ表示を厳密に回避するのが大好きです。同じことがのようなインターフェースにも当てはまりますIInterface。私は好むInterfacable。しかし、チームで作業するときは、ルールを遵守する必要がありました:(
nawfal 2013年

回答:


484

推奨命名と大文字規則は使用することですPを ascal Cは asing(Microsoftはというツールがある定数のためStyleCop -それは少しですが、文書のすべての好適な規則とすると、コンプライアンスのためのあなたの源を確認することができますことをあまりにも多くの人々の好みのために肛門保持を) 。例えば

private const int TheAnswer = 42;

Pascalの大文字表記規則は、Microsoftのフレームワーク設計ガイドラインにも記載されています。


51
実際、StyleCopは「Microsoft製品ではなく」、「Microsoftの非常に熱心な開発者が(夜と週末に)開発したツールです」。(詳細については、blogs.msdn.com / sourceanalysis / archive / 2008/07/20 /…およびblogs.msdn.com/bharry/archive/2008/07/19/…を参照してください)。規則では定数にPascal大文字小文字を使用するため、ツールはMicrosoft 発行および保証する標準を適用するだけです。
bdukes

12
@bdukes-マイクロソフト製品だとは言いませんでしたが、組織全体で非常に多くの使用法とサポートがあります(元従業員として、私はマイクロソフト社外の誰かが手に入れる前に何年も使っていたので、私はその遺産をよく知っています)。
グレッグビーチ、

8
最初の文字は通常、変数が外部から見えるかどうかを示すために使用されるため、これは好きではありません。コードでは、TheAnswerは私にとってプライベートなconstではなく、パブリックプロパティのように見えます。実際には、constTheAnswerやConstTheAnswerのような接頭辞を使用したいと思います。
Efrain、

52
値が42の場合を除いて、TheAnswer表記を使用します。この場合、ALL_CAPSアプローチを使用することになります。
Benoittr

4
プライベートフィールドはキャメルケースにすべきではありません。constの場合はイベントですか?
Markus Meyer

70

視覚的には大文字が適切です。そのように認識できるのです。一意性と推測の余地を残すために、UPPER_CASEに投票します。

const int THE_ANSWER = 42;

:大文字は、ページ上部の同じファイル内で、インテリセンスの目的で定数を使用する場合に役立ちます。ただし、それらを独立したクラスに移動する場合、大文字を使用しても、例としてそれほど大きな違いはありません。

public static class Constant
{
    public static readonly int Cons1 = 1;
    public static readonly int coNs2 = 2;
    public static readonly int cOns3 = 3;
    public static readonly int CONS4 = 4;
}

// Call constants from anywhere
// Since the class has a unique and recognizable name, Upper Case might lose its charm
private void DoSomething(){
var getCons1 = Constant.Cons1;
var getCons2 = Constant.coNs2;
var getCons3 = Constant.cOns3;
var getCons4 = Constant.CONS4;
 }

5
Pascalのケーシングはプロパティの参照と混同されやすいので、私もこれを好みます。
bc3tech 2015

8
上記の推奨事項に関係なく、定数にはUPPER_CASEを使用することをお勧めします。これにより、定数を他のどのケースよりもはるかに識別しやすくなります。
ダブスタイル

23
@usefulBee "SNAKE_CASE"はC#ではお勧めしません。この答えは間違っています。C#でのconstの正しいケースは「TitleCase」です。
BrainSlugs83

13
@ BrainSlugs83、私はここに正しいか間違っているとは思いません。それは好みとコードをより明確にするものに帰着します。
有用なビー

2
@usefulBee同意する。しかし、それを書くためのコンセンサスの方法が何であるかをマークすることは依然として良いです。最近、Rubyコードのロードを行っており、SCREAMING_SNAKE_CASEは理にかなっていると思います。これが特別なものであることは明らかであり、その内容を見つけるためにホバー/定義に移動する必要もありません。あなたはすぐにそれを知っています。
Lundbergによる

69

実際には

private const int TheAnswer = 42;

少なくとも、.IMライブラリを見る場合、どのIMOが命名規則を決定するための最良の方法です-したがって、コードは場違いに見えません。


23

私はまだconstの値に大文字を使用しますが、これは特定の理由よりも癖になります。

もちろん、何かが定数であることがすぐにわかります。私への質問は、次のとおりです。本当にこの情報が必要ですか?エラーを回避するために何らかの方法で役立ちますか?constに値を割り当てると、コンパイラは私が何かおかしいことをしたと私に告げます。

私の結論:ラクダのケーシングで行く。多分私も私のスタイルを変更します;-)

編集:

何かがあることにおいハンガリーはIMO、本当に有効な引数ではありません。問題は常にあるはずです:それは助けになりますか、それとも傷つけますか?

ハンガリー語が役立つ場合があります。最近はそれほど多くありませんが、まだ存在しています。


30
コードは書かれているよりもずっと頻繁に読み込まれます。確かに、コードを記述しているとき、コンパイラーは定数への代入を禁止します。しかし、2年後にコードを保守しなければならない人はどうでしょうか。定数をすぐに認識できるのは素晴らしいことです。
Greg Hewgill、

2
今日のIDEはコンパイル前に多くの問題を捉えています。名前で定数を認識することは重要ではないと思います。そうでなければ、読み取り専用変数にも特別な名前を追加するべきではありませんか?
mmiika 2008年

5
考えてみれば、大文字のハビタはおそらく定数ではなくプリプロセッサマクロから来たものです(真の定数にブロックキャップを使用したことはありません)。そのコンテキストでは、マクロを実際のコードから区別することは理にかなっています。マクロは実際には定数でなく式である可能性があり、その展開は副作用などを引き起こす可能性があるためです。したがって、マクロを使用しているときとconstを使用しているときを知る必要があります。私は個人的にプリプロセッサマクロの裏側を見てうれしいです。それらには、コードを読みにくくする可能性がたくさんありました。
Tim Long、

7
@ティム:私は同意します、結局、プリプロセッサマクロは良いよりも害をもたらしました。私の最もお気に入りのPPマクロ: "#DEFINE Private Public" ;-)
Treb

1
@Tim:C ++標準テンプレートライブラリでは、std :: string :: npos(cplusplus.com/reference/string/string/npos)などの定数に小文字が採用されています。したがって、ALL_CAPSは、マクロとプリプロセッサディレクティブ専用です。これにより、C#ではさらに奇妙に見えます。
Richard Dingwall、2011年

16

まず、ハンガリー語表記は、プレフィックスを使用してパラメーターのデータ型または使用目的を表示する方法です。Microsoftの命名規則では、ハンガリー語表記 http://en.wikipedia.org/wiki/Hungarian_notation http://msdn.microsoft.com/en-us/library/ms229045.aspx

ここで述べられているように、大文字の使用は推奨されません。 http://en.wikibooks.org/wiki/C_Sharp_Programming/Naming

Microsoftはまた、既存のスキームと一致させる場合は大文字を使用できるとここでも述べています。 http://msdn.microsoft.com/en-us/library/x2dbyw72.aspx

これはかなり要約しています。


3
はい、ハンガリー語の表記はすべて大文字ではありません。
snibbets 2013年

13

Microsoftはその記事「定数(C#プログラミングガイド)」で、次の例を示しています。

class Calendar3
{
    const int months = 12;
    const int weeks = 52;
    const int days = 365;

    const double daysPerWeek = (double) days / (double) weeks;
    const double daysPerMonth = (double) days / (double) months;
}

したがって、定数について、Microsoftがの使用を推奨しているようですcamelCasing。ただし、これらの定数はローカルで定義されることに注意してください。

間違いなく、外部から見える定数の命名はより重要です。実際には、Microsoftはそのパブリック定数を.NETクラスライブラリにfieldsとしてドキュメント化しています。ここではいくつかの例を示します。

最初の2つはの例ですPascalCasing。3番目は、2文字の頭字語に関する Microsoftの大文字表記規則に従っているようです(ただし、piは頭文字ではありません)。そして4番目のものは、2文字のアクリノニムのルールがE(数学定数eを表す)などの1文字の頭字語または識別子に拡張されることを示唆しているようです。

さらに、Microsoftはその資本化規約文書で、フィールド識別子はviaで名前を付ける必要があると直接述べておりPascalCasingMessageQueue.InfiniteTimeoutおよびUInt32.Minの次の例を示しています。

public class MessageQueue
{
    public static readonly TimeSpan InfiniteTimeout;
}

public struct UInt32
{
    public const Min = 0;
}

結論:PascalCasingパブリック定数constまたはstatic readonlyフィールドとして文書化されている)に使用します。

最後に、私が知る限り、Microsoftは、質問に示された例に示されているように、プライベート識別子の特定の命名規則または大文字表記規則を推奨していません。


その記事を書いた開発者は、Microsoftが推奨するC#のスタイル規則に明らかに従っていません。
BrainSlugs83

2
この回答が指す記事は変更されました。constは現在公開されており、PascalCasedになっています。これらの両方の変更を考慮すると、これは、プライベート定数をPascalCasedとcamelCasedのどちらにする必要があるかを判断するのに役立ちません。
Metalogic

12

ハンガリー人をハンガリー人に任せなさい。

この例では、決定的な記事を省いて、

private const int Answer = 42;

その答えですか、それともその答えですか?

* Pascalとして厳密に修正して編集しましたが、問題は生命、宇宙、およびすべてに対するより多くの答えを求めていると思っていました


2
この特定のケースでは、ある答え。しかし、私はD.Adamsをそんなに読むのが好きだからです。
Treb

はい、でも質問は何ですか?そして、私に不便なラインのために申し訳ありませんが供給しないでください;)

2
ああ、でもあなたはすでに答えを知っているので、質問を知ることはできません。それらは相互に排他的です。(あなたはすでにそれを知っていたでしょう;-)
Treb

これはOPの質問に対する正しい答えです。-私がTheできればifを削除するためにあなたに2回賛成します。:-)
BrainSlugs83 2016

ハンガリー人とは何ですか、この回答は他の慣習を使用することを許可されていると言っていますか?
プリニー船長、


6

ALL_CAPSは、CおよびC ++の作業方法から取ったものだと思います。この記事は、スタイルの違いについて説明します。

Visual Studioなどの新しいIDEでは、タイプ、スコープ、およびそれらが一定であるかどうかを簡単に識別できるため、厳密には必要ありません。

FxCopのとMicrosoft StyleCopソフトウェアは、誰もが同じように動作しますので、あなたに指針を与え、あなたのコードをチェックするのに役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.