programing

열거형 명명 규칙 - 복수

bestprogram 2023. 5. 27. 12:05

열거형 명명 규칙 - 복수

비슷한 것을 읽었지만 정확히 제가 C# 열거형 및 속성 일치를 위한 명명 규칙에서 원하는 것이 아님에도 불구하고 저는 이 질문을 합니다.

저는 열거형을 복수형으로 명명한 다음 단수형으로 '사용'하는 경향이 있다는 것을 발견했습니다. 예:

public enum EntityTypes {
  Type1, Type2
}

public class SomeClass {
  /*
    some codes
  */

  public EntityTypes EntityType {get; set;}

}

물론 그것은 효과가 있고 이것이 제 스타일입니다. 하지만 누가 그런 관습에서 잠재적인 문제를 찾을 수 있을까요?"Status"라는 단어로 "못생긴" 이름을 지었습니다.

public enum OrderStatuses {
  Pending, Fulfilled, Error, Blah, Blah
}

public class SomeClass {
  /*
    some codes
  */

  public OrderStatuses OrderStatus {get; set;}

}

추가 정보: 제 질문이 충분히 명확하지 않았을 수 있습니다.나는 종종 내가 정의한 열거형의 변수 이름을 지정할 때 곰곰이 생각해야 합니다.최상의 방법은 알고 있지만 변수 이름을 지정하는 작업을 쉽게 하는 데는 도움이 되지 않습니다.

모든 열거 속성(예: "상태")을 "내 상태"로 표시할 수 없습니다.

제 질문: 위에 설명된 제 규약에서 잠재적인 문제를 찾을 수 있는 사람이 있습니까?그것은 베스트 프랙티스에 관한 것이 아닙니다.

질문 대체:

글쎄요, 이런 질문을 해야 할 것 같습니다. 누군가가 사용할 때 열거형의 이름을 쉽게 지정할 수 있는 일반적인 방법을 제시할 수 있을까요?

의 경우 단수형을 사용할 것을 합니다.EnumEnum비트 필드를 나타냅니다( 참조).열거형 유형 명명 규칙(Microsoft의 명명 지침의 일부)을 참조하십시오.

귀하의 설명에 부응하기 위해 다음 중 어느 것에도 문제가 없다고 생각합니다.

public enum OrderStatus { Pending, Fulfilled, Error };

public class SomeClass { 
    public OrderStatus OrderStatus { get; set; }
}

또는

public enum OrderStatus { Pending, Fulfilled, Error };

public class SomeClass {
    public OrderStatus Status { get; set; }
}

저는 복수형에서 열거형 이름을 짓기 시작했지만 그 이후로 단수형으로 바뀌었습니다.그것들이 어디에 쓰이는지에 대한 맥락에서 더 말이 되는 것 같습니다.

enum Status { Unknown = 0, Incomplete, Ready }

Status myStatus = Status.Ready;

비교:

Statuses myStatus = Statuses.Ready;

저는 문맥상 단수형이 더 자연스럽게 들린다고 생각합니다.우리는 한 장소에서 발생하는 열거를 선언할 때 "이것은 무엇이든 간에"라고 생각하지만, 그것을 사용할 때, 아마도 많은 장소에서 "이것은 무엇이든 간에"라고 생각한다는 것에 동의합니다.

그 상황은 절대 복수에 적용되지 않습니다.

안 안enum어떤 것 또는 다른 것의 속성을 보여줍니다.예를 들어 보겠습니다.

enum Humour
{
  Irony,
  Sarcasm,
  Slapstick,
  Nothing
}

한 가지 유형을 사용할 수 있지만, 이를 복수가 아닌 복수로 생각해 보십시오.

Humour.Irony | Humour.Sarcasm

보다는

Humours { Irony, Sarcasm }

당신은 유머 감각이 있고 유머 감각이 없습니다.

이 곳은 제가 협약에 반대할 만큼 충분히 동의하지 않는 몇 안 되는 곳 중 하나입니다. 솔직히, 저는 열거의 정의와 그것의 인스턴스가 같은 이름을 가질 수 있다는 것이 싫습니다.저는 모든 에넘을 "에넘"으로 수정합니다. 이는 특정 용도에서 에넘의 맥락이 무엇인지 명확하게 하기 때문입니다.IMO 이것은 코드를 훨씬 더 읽기 쉽게 만듭니다.

public enum PersonTypesEnum {
    smart,
    sad,
    funny,
    angry
}


public class Person {   
    public PersonTypesEnum PersonType {get; set;}
}

아무도 무엇이 열거형이고 무엇이 그것의 인스턴스인지 결코 혼동하지 않을 것입니다.

일반적으로 [Flags] 속성이 연결된 열거형(따라서 비트 필드를 포함할 수 있음)을 제외하고는 권장 베스트 프랙티스는 단수형입니다.

편집된 질문을 읽고 나면 속성 이름이나 변수 이름이 열거형 이름과 달라야 한다는 느낌이 듭니다.그렇지 않습니다.다음은 완벽하게 좋습니다...

  public enum Status { New, Edited, Approved, Cancelled, Closed }

  public class Order
  {
      private Status stat;
      public Status Status
      { 
         get { return stat; }
         set { stat = value; }
      }
  }

만약 당신이 다음과 같이 간단하지만 금지된 코드를 쓰려고 한다면:

    public class Person
    {
        public enum Gender
        {
            Male,
            Female
        }
        //Won't compile: auto-property has same name as enum
        public Gender Gender { get; set; }  
    }

옵션은 다음과 같습니다.

  1. MS 권장 사항을 무시하고 열거 이름에 접두사 또는 접미사를 사용합니다.

    public class Person
    {
        public enum GenderEnum
        {
            Male,
            Female
        }
        public GenderEnum Gender { get; set; }
    }
    
  2. 클래스 외부(가능하면 다른 클래스로)로 열거형 정의를 이동합니다.위의 내용에 대한 쉬운 해결책은 다음과 같습니다.

    public class Characteristics
    {
        public enum Gender
        {
            Male,
            Female
        }
    }
    public class Person
    {
        public Characteristics.Gender Gender { get; set; }  
    }
    

모범 사례 - 단수를 사용합니다.Enum을 구성하는 항목 목록이 있습니다.목록에 있는 항목을 사용하는 것은 당신이 말할 때 이상하게 들립니다.Versions.1_0라고 말하는 것이 더 이치에 맞습니다.Version.1_01_0 버전이 하나만 있기 때문입니다.

좀 늦게 들어오다니...

귀하의 질문과 귀하가 언급한 질문(제가 질문한 질문) 사이에는 중요한 차이가 있습니다.

열거형 정의를 클래스 밖으로 내보내면 열거형 및 속성에 대해 동일한 이름을 가질 수 있습니다.

public enum EntityType { 
  Type1, Type2 
} 

public class SomeClass { 
  public EntityType EntityType {get; set;} // This is legal

}

이 경우 MS 가이드라인을 따르고 열거형에 대해 단일 이름을 사용합니다(플래그의 경우 복수).가장 쉬운 해결책일 겁니다.

(다른 질문에서) 제 문제는 열거형이 클래스의 범위에 정의되어 열거형의 정확한 이름을 따서 명명된 속성을 사용할 수 없는 경우입니다.

열거형 선언에 복수형을 사용하는 이유는 (선언 당시) 여러 값으로 선언하기 때문에 복수형이 좋아 보이기 때문입니다...그러나 선언될 때 enum이 (지정된 값 집합에서) 가질 수 있는 값을 지정한다는 사실은 무시합니다.해당 열거형의 인스턴스에 여러 값이 저장된다는 의미는 아닙니다.다음을 쓸 때: enum Days {MON, TUE, WED, TU, FRI, SAT, SUN}; 제공되는 여러 값 때문에 여러 개로 만듭니다.그러나 사용할 경우(일 = 일).MON; ) 해당 열거형의 인스턴스가 단일 값을 가져야 한다는 것을(를) 완전히 무시합니다.그래서 우리가 enum Day {MON, TUE, WED, TU, FRI, SAT, SUN}을 쓸 때, 우리는 하루를 값으로 가질 수 있는 enum이 있기 때문에 단수가 더 적절하다는 것을 의미합니다.(위에서 이미 설명한 바와 같이) 단수 이름을 사용하지 않고 이 문제를 해결하려면 DayEnum이나 EDay와 같은 모든 종류의 인디케이터를 사용해야 합니다(두 번째 인디케이터를 선호합니다).

다른 스레드 C#에서 열거속성 일치를 위한 명명 규칙은 매우 좋은 아이디어라고 누군가가 지적했습니다.

"제 제안이 .NET 명명 규칙에 어긋난다는 것을 알고 있지만, 저는 개인적으로 열거형 플래그에 'E'를 붙이고 열거형 플래그에 'F'를 붙입니다(인터페이스에 'I'를 붙이듯이)."

언급URL : https://stackoverflow.com/questions/1405851/enum-naming-convention-plural