상수에 대한 C # 명명 규칙?


419
private const int THE_ANSWER = 42;

또는

private const int theAnswer = 42;

개인적으로 현대 IDE를 사용하면 ALL_CAPS가 이상하게 보일 때 camelCase와 함께 가야한다고 생각합니다. 어떻게 생각해?


4
@mmiika :이 예제에서 "the"의 의미는 무엇입니까? "The Hitchhiker 's Guide to the Galaxy"에서와 같습니까? 아니면 일부 C ++ 코딩 표준에서 가져 옵니까? (예 : Macintosh 용 오래된 C ++ 프레임 워크 생각 C [이상 시만텍 C ++, 사용 접두사 "의"포인터 / 참조 회원들과 내용은 ""스칼라 회원.)
피터 모텐슨

5
@Peter, 상수의 값이 42이기 때문에 The Hitchhiker 's Guide to the Galaxy에 대한 참조라고 강력하게 믿습니다 .
Albireo

@PeterMortensen 창의적입니다! 그러나 직원 및 직원과 같은 이름은 오해의 소지가있는 것처럼 들립니다.
Camilo Martin


나는 선호한다 theAnswer. 이전에는 헝가리 표기법 팬 이었지만 사용하지 않는 법을 배운 이후로 이름을 지정할 때 메타 표시를 엄격하게 피하는 것이 좋습니다. 같은 인터페이스도 마찬가지 IInterface입니다. 나는 선호한다 Interfacable. 그러나 팀에서 일할 때 나는 규칙을 준수해야했습니다 :(
nawfal

답변:


484

권장 명명 및 대문자 규칙은 사용하는 것입니다 P의 ascal의 C를 asing (마이크로 소프트라는 이름의 도구가 상수 StyleCop - 그것은 조금 비록 문서의 모든 기본 규칙 준수에 대한 귀하의 소스를 확인 할 수있는 너무 항문 많은 사람들의 취향에 대한 유지력을) . 예 :

private const int TheAnswer = 42;

파스칼 대문자 표기법은 Microsoft의 프레임 워크 설계 지침 에도 문서화되어 있습니다.


51
실제로 StyleCop은 "Microsoft 제품이 아니라"Microsoft의 열정적 인 개발자가 저녁과 주말에 개발 한 도구입니다. 자세한 내용은 blogs.msdn.com/sourceanalysis/archive/2008/07/20/…blogs.msdn.com/bharry/archive/2008/07/19/… 참조 ) Microsoft의 프레임 워크 명명 컨벤션은 상수에 파스칼 케이싱을 사용하므로이 도구는 Microsoft 게시하고 보증 하는 표준을 시행합니다 .
bdukes

12
@bdukes-나는 그것이 Microsoft 제품이라고 말하지는 않았지만 조직 전체에서 상당히 많은 사용법과 지원을 가지고 있습니다 (전 직원으로서 Microsoft 이외의 다른 사람들이 손을 잡기 몇 년 전에 그것을 사용하고 있었으므로 나는 그 유산을 잘 알고 있습니다).
Greg Beech

8
첫 번째 문자는 일반적으로 변수가 외부에 보이는지 여부를 나타내는 데 사용되기 때문에 이것을 좋아하지 않습니다. 코드에서 TheAnswer는 개인 소유가 아닌 공공 재산처럼 보입니다. 실제로 constTheAnswer 및 ConstTheAnswer와 같은 접두사를 사용하는 것이 좋습니다.
Efrain

52
값이 42 일 때를 제외하고 TheAnswer 표기법을 사용합니다.이 경우 ALL_CAPS 접근 방식을 결정합니다.
Benoittr 2016 년

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
파스칼 케이싱은 속성 참조와 쉽게 혼동 될 수 있기 때문에 이것을 선호합니다.
bc3tech

8
위의 권장 사항에 관계없이 상수에 대해서는 UPPER_CASE를 선호합니다. 다른 경우에 비해 훨씬 쉽게 식별 할 수 있습니다.
dub stylee

23
@usefulBee "SNAKE_CASE"는 C #에서 권장하지 않습니다. 이 답변은 잘못되었습니다. C #의 const에 대한 올바른 사례는 "TitleCase"입니다.
BrainSlugs83

13
@ BrainSlugs83, 여기에 옳고 그름이 없다고 생각합니다. 그것은 선호도와 코드를 더 명확하게 만드는 것입니다.
유용한 Bee

2
@usefulBee 동의합니다. 그러나 여전히 합의 를 작성하는 방법 을 표시하는 것이 좋습니다 . 나는 최근에 많은 루비 코드를 수행해 왔으며 SCREAMING_SNAKE_CASE가 의미가 있다고 생각합니다. 그것이 특별한 무언가라는 것이 매우 분명하며, 정의를 가리 키기 위해 마우스를 가져 가거나 / 정의 할 필요조차 없습니다. 당신은 그것을 즉시 알고 있습니다.
Per Lundberg

69

실제로는

private const int TheAnswer = 42;

적어도 .NET 라이브러리를 살펴보면 명명 규칙을 결정하는 가장 좋은 방법은 IMO입니다. 따라서 코드가 제대로 표시되지 않습니다.


23

나는 여전히 const 값을 대문자로 사용하지만 이것은 특별한 이유보다 습관이 아닙니다.

물론 무언가가 const라는 것을 즉시 쉽게 볼 수 있습니다. 나에게 질문은 :이 정보가 정말로 필요한가? 오류를 피하는 데 어떤 도움이됩니까? const에 값을 할당하면 컴파일러가 바보 같은 짓을했음을 알려줍니다.

내 결론 : 낙타 케이싱으로 가십시오. 어쩌면 나도 내 스타일을 바꿀 것입니다 ;-)

편집하다:

뭔가 그 냄새 헝가리어은 IMO, 정말 유효한 인수가 아닙니다. 문제는 항상 다음과 같아야합니다. 도움이됩니까, 아니면 아프습니까?

헝가리어가 도움이되는 경우가 있습니다. 오늘날에는 그렇게 많지는 않지만 여전히 존재합니다.


30
코드는 작성된 것보다 훨씬 자주 읽습니다. 물론, 코드를 작성할 때 컴파일러는 상수를 할당하지 못하게합니다. 하지만 지금부터 2 년 동안 코드를 유지해야하는 사람은 어떻습니까? 상수를 즉시 인식 할 수있는 것이 좋습니다.
Greg Hewgill

2
오늘날의 IDE는 컴파일 전에 많은 문제를 포착합니다. 이름으로 상수를 인식하는 것이 중요하다고 생각하지 않습니다. 그렇지 않으면 읽기 전용 변수에 특별한 이름을 추가해서는 안됩니까?
mmiika

5
당신이 그것에 대해 생각한다면, 대문자 habbit는 아마도 상수가 아닌 전 처리기 매크로에서 왔을 것입니다 (나는 진정한 상수에 대해 블록 캡을 사용한 적이 없습니다). 이러한 맥락에서 매크로를 실제 코드와 구분하는 것이 합리적입니다. 매크로는 실제로 상수 값이 아닌 표현식 일 수 있으며 확장으로 인해 부작용이 발생할 수 있습니다. 따라서 매크로를 사용하는 시간과 const를 사용하는 시간을 알아야합니다. 나는 전 처리기 매크로의 뒷면을 보게되어 기쁘다. 코드를 읽기 어렵게 만들 가능성이 높다.
Tim Long

7
@Tim : 전 처리기 매크로가 좋은 것보다 더 큰 해를 끼쳤다는 데 동의합니다. 내가 가장 좋아하는 PP 매크로 : "#DEFINE Private Public";-)
Treb

1
@Tim : C ++ 표준 임시 라이브러리는 상수에 소문자를 채택했습니다 (예 : std :: string :: npos ( cplusplus.com/reference/string/string/npos )). 따라서 ALL_CAPS는 매크로 및 전 처리기 지시문에만 사용되므로 C #에서 더 어리석게 보입니다.
Richard Dingwall

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 2016 년

13

기사 Constants (C # Programming Guide) 에서 Microsoft는 다음 예제를 제공합니다.

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 클래스 라이브러리에 필드 로 문서화 합니다 . 여기 몇 가지 예가 있어요.

처음 두 개는의 예입니다 PascalCasing. 세 번째 는 두 글자의 약어에 대한 Microsoft의 대문자 표기 규칙 을 따르는 것으로 보입니다 ( pi 는 약어 는 아님). 그리고 네 번째 문자는 두 글자의 약어에 대한 규칙이 E(수학적 상수 e 를 나타내는) 단일 문자 약어 또는 식별자로 확장된다고 제안하는 것 같습니다 .

또한 대문자 표기법 문서에서 Microsoft는 필드 식별자를 통해 이름을 지정해야하며 MessageQueue.InfiniteTimeoutUInt32.Min에PascalCasing 대한 다음 예제를 제공합니다 .

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;

그 대답입니까? 아니면 그 대답입니까?

* 파스칼로 엄격하게 수정했지만, 나는 그 질문이 삶과 우주 그리고 모든 것에 더 많은 해답을 찾고 있다고 생각하고있었습니다 .


2
이 특정한 경우 답입니다. 그러나 나는 D.Adams를 너무 많이 읽는 것을 좋아하기 때문에.
Treb

예, 그러나 질문은 무엇입니까? 불편을 끼쳐 드려 죄송합니다.;)
dove

2
아, 그러나 당신은 이미 답을 알고 있기 때문에 당신은 그 질문을 알 수 없습니다. 그들은 상호 배타적입니다. (당신은 이미 그 사실을 알고 있었지만 ;-)
Treb

이것은 OP의 질문에 대한 정답입니다. -가능한 The경우 제거를 위해 두 번 투표했습니다 . :-)
BrainSlugs83

헝가리 사람은 무엇입니까?이 답변은 다른 규칙을 사용할 수 있다고 말합니까?
Capnny Prinny

6

실제로 PascalCase를 선호하는 경향이 있지만 습관이 없으면 UPPER_CASE가 유죄입니다 ...


6

ALL_CAPS는 내가 믿는 C 및 C ++ 작업 방식에서 가져 왔습니다. 이 문서 여기는 스타일의 차이에 대해 온 방법을 설명합니다.

Visual Studio와 같은 새로운 IDE에서는 유형, 범위 및 상수를 쉽게 식별 할 수 있으므로 꼭 필요한 것은 아닙니다.

의 FxCop 및 Microsoft StyleCop의 소프트웨어는 당신에게 지침을주고 모두가 같은 방식으로 작동합니다 귀하의 코드를 확인하는 데 도움이됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.