Programing

열거 형 명명 규칙-복수

lottogame 2020. 4. 9. 08:00
반응형

열거 형 명명 규칙-복수


열거 형과 일치하는 속성에 대한 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;}

}

추가 정보 : 내 질문이 명확하지 않을 수 있습니다. 정의 된 열거 형 유형의 변수 이름을 지정할 때 종종 열심히 생각해야합니다. 모범 사례를 알고 있지만 이러한 변수의 이름 지정 작업을 쉽게하는 데 도움이되지 않습니다.

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

내 질문 : 위에서 설명한 내 컨벤션에 문제가있는 사람이 있습니까? 모범 사례가 아닙니다.

질문 문구 :

글쎄, 나는 이런 식으로 질문을해야한다고 생각한다. 누군가 열거 형의 이름을 지정하는 좋은 일반적인 방법을 사용할 수 있습니까?


비트 필드를 나타내는 Enum경우가 아니라면 s에 단수를 사용하는 것이 좋습니다 . 열거 유형 명명 규칙 (Microsoft 명명 지침 의 하위 집합)을 참조하십시오 .EnumFlagsAttribute

설명에 답하기 위해 다음 중 하나에 아무런 문제가 없습니다.

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 }

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


일반적으로 모범 사례 권장 사항은 [Flags] 특성이 첨부되어 있고 (따라서 비트 필드를 포함 할 수있는) 열거 형을 제외하고는 단수형입니다.

편집 된 질문을 읽은 후 속성 이름이나 변수 이름이 열거 형 이름과 달라야한다고 생각할 수 있습니다. 다음은 완벽하게 괜찮습니다 ...

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

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

이것은 내가 그것에 반대 할 수있는 협약에 동의하지 않는 몇 안되는 장소 중 하나입니다. TBH, 열거 형과 그 인스턴스의 정의가 동일한 이름을 가질 수 있다는 것을 싫어합니다. 모든 열거 형을 "Enum"으로 접미사로 지정하면 주어진 사용법에서 컨텍스트가 무엇인지 명확하게 알 수 있기 때문입니다. IMO는 코드를 훨씬 더 읽기 쉽게 만듭니다.

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


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

아무도 열거 형과 그 인스턴스가 무엇인지 혼동하지 않습니다.


모범 사례-단수형을 사용하십시오. Enum을 구성하는 항목 목록이 있습니다. 말할 때 목록에있는 항목을 사용하는 것이 이상하게 들립니다 Versions.1_0. Version.1_01_0 버전이 하나만 있기 때문에 말하는 것이 더 합리적 입니다.


다음과 같이 간단하지만 금지 된 코드를 작성하려는 경우 :

    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; }  
    }
    

조금 늦게오고 ...

질문과 언급 한 질문 (내가 ;-) 사이에 중요한 차이점이 있습니다 .

열거 형 정의를 클래스에서 제외하면 열거 형과 속성의 이름이 동일 할 수 있습니다.

public enum EntityType { 
  Type1, Type2 
} 

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

}

이 경우, MS 지침을 따르고 열거 형에 단일 이름을 사용합니다 (플래그에 복수). 가장 쉬운 솔루션입니다.

내 문제 ( 다른 질문에서 )는 열거 형이 클래스 범위에 정의되어 열거 형의 이름을 딴 속성을 사용하지 못하게하는 것입니다.


다른 스레드 에서 열거 형 및 일치하는 속성에 대한 C # 명명 규칙에서 누군가가 매우 좋은 생각이라고 지적했습니다.

"제 제안은 .NET 명명 규칙에 위배된다는 것을 알고 있지만 개인적으로 enum 앞에 'E'를 붙이고 enum 플래그에 'F'를 붙입니다 (인터페이스에 'I'를 접두어 쓰는 방식과 유사)."

참고 URL : https://stackoverflow.com/questions/1405851/enum-naming-convention-plural

반응형