열거형

Enumerated type

컴퓨터 프로그래밍에서 열거형(R 프로그래밍 언어에서는 열거형, 열거형 또는 계수형이라고도 하며 통계학에서는 범주형 변수라고도 함)은 해당 유형의 요소, 멤버, 열거형 또는 열거형이라고 하는 명명된 값의 집합으로 구성된 데이터 유형입니다.열거자 이름은 일반적으로 언어에서 상수 역할을 하는 식별자입니다.열거형 유형은 단위 유형의 축퇴 태그 결합으로 볼 수 있습니다.열거된 유형을 가진 것으로 선언된 변수는 모든 열거자를 값으로 할당할 수 있습니다.즉, 열거형은 서로 다른 값을 가지며 비교 및 할당이 가능하지만 컴퓨터 메모리에 특정한 구체적인 표현을 갖는 것으로 프로그래머에 의해 특정되지 않는다.컴파일러와 인터프리터는 임의로 그것들을 나타낼 수 있다.

예를 들어 카드 한 벌에 있는 4개의 정장은 Club, Diamond, Heart Spade라는 이름의 4개의 열거자로, suit라는 이름의 열거형에 속할 수 있습니다.변수 V가 데이터 유형으로 적합하다고 선언된 경우 이 네 가지 값 중 하나를 해당 변수에 할당할 수 있습니다.

열거자는 일반적으로 구별되지만 일부 언어에서는 동일한 열거자를 유형 선언에 두 번 나열할 수 있습니다.열거자의 이름은 의미론적으로 완전하거나 어떤 의미에서도 호환될 필요는 없습니다.예를 들어 color라고 하는 열거형은 Red, Green, Zebra, Missing Bacon 열거자로 구성되도록 정의할 수 있습니다.어떤 언어에서는 열거형식의 선언이 의도적으로 멤버의 순서를 정의하기도 하고, 어떤 언어에서는 열거형식의 순서를 정의하기도 하며, 어떤 언어에서는 열거형식을 정수로서 구체적으로 나타내는 컴파일러로부터 암묵적인 순서가 생기기도 한다.

일부 열거자 유형은 언어에 포함될 수 있습니다.를 들어 부울 유형은 False 및 True 의 사전 정의된 열거형입니다.많은 언어에서 사용자는 새로운 열거형 유형을 정의할 수 있습니다.

열거형 값과 변수는 보통 고정 길이 비트 문자열로 구현되며, 종종 일부 정수 유형과 호환되는 형식과 크기로 구현됩니다.일부 언어(특히 시스템 프로그래밍 언어)에서는 사용자가 각 열거자에 사용할 비트 조합을 지정할 수 있습니다.유형 이론에서 열거형은 종종 단위 유형의 태그 부착 결합으로 간주됩니다.이러한 유형은 1+ + + (\ 11)이기 때문에 자연수로도 쓸 수 있습니다.

근거

일부 초기 프로그래밍 언어에는 원래 열거형이 없었습니다.프로그래머가 변수(를 들어 myColor)에 빨간색 값을 지정하기를 원하는 경우, 변수 빨간색이 선언되고 임의의 값(일반적으로 정수)이 할당됩니다.그러면 빨간색 변수가 myColor에 할당됩니다.기타 기술에서는 열거자의 이름을 포함하는 문자열에 임의 값을 할당했습니다.

이러한 임의의 값은 종종 숫자가 어떻게 얻어졌는지 또는 실제 값이 유의한지 설명하지 않았기 때문에 매직넘버라고 불리기도 했다.이러한 매직넘버로 인해 소스코드는 다른 사람이 이해하고 유지하기 어려워질 수 있습니다.

반면 열거형 유형은 코드를 더욱 자기 문서화합니다.언어에 따라 컴파일러는 자동으로 열거자에 기본값을 할당하여 프로그래머로부터 불필요한 세부사항을 숨길 수 있습니다.이러한 값은 프로그래머에게 보이지 않을 수도 있습니다(정보 숨김 참조).열거형은 프로그래머가 열거자 값에 대해 수학적 연산을 수행하는 것과 같은 비논리적인 코드를 쓰는 것을 방지할 수도 있습니다.열거자가 할당된 변수의 값이 인쇄될 경우, 일부 프로그래밍 언어는 기본 숫자 값이 아닌 열거자의 이름을 인쇄할 수도 있습니다.또한 열거형 유형을 사용하면 컴파일러가 의미적 정확성을 강제할 수 있습니다.예:myColor = TRIANGLE금지할 수 있지만myColor = REDTRANGLE과 RED가 모두 내부적으로 1로 표시되는 경우에도 허용됩니다.

개념적으로 열거형은 가능한 각 유형에는 고유한 자연수가 할당되기 때문에 명명법 목록(숫자 코드)과 유사합니다.따라서 특정 열거형은 이 개념의 구체적인 구현이다.순서가 의미가 있거나 비교에 사용되는 경우 열거형은 서수형이 됩니다.

관습

프로그래밍 언어에는 독자적인 프로그래밍 스타일과 명명 규칙이 있는 경우가 많습니다.열거에 할당된 변수는 보통 단수 형식의 명사이며, 종종 Pascal Case 또는 대문자 규칙을 따르지만 소문자 및 기타는 덜 자주 표시됩니다.

여러 프로그래밍 언어의 구문

파스칼 및 구문적으로 유사한 언어

파스칼

Pascal에서는 괄호 안에 값을 나열함으로써 열거형 유형을 암묵적으로 선언할 수 있습니다.

  변화하다     수트: (클럽, 다이아몬드, 하트, 스페이드); 

선언은 종종 여러 변수에 사용할 수 있도록 유형 동의어 선언에 나타납니다.

  유형     카드 슈트 = (클럽, 다이아몬드, 하트, 스페이드);     카드 = 기록.              수트: 카드 슈트;              가치: 1 .. 13;            끝.;   변화하다     : 배열 [ 1 .. 13 ]  카드;     으뜸패: 카드 슈트; 

열거 값이 지정된 순서입니다.열거형은 서수형이며,pred그리고.succ함수는 열거의 이전 또는 다음 값을 제공합니다.ord는 열거값을 정수 표현으로 변환할 수 있습니다.그러나 표준 파스칼은 산술 형식에서 열거형으로 변환하는 기능을 제공하지 않습니다.확장 Pascal은 확장 기능을 통해succ기능.다른 파스칼 사투리도 타입캐스트를 통해 사용할 수 있습니다.Modula-3와 같은 파스칼의 일부 현대 후손들은 특별한 변환 구문을 제공하는데, 라고 불리는 방법을 사용한다.VAL모듈라-3도 치료합니다.BOOLEAN그리고.CHAR미리 정의된 특수한 열거형 및 용도ORD그리고.VAL표준 ASCII 디코딩 및 인코딩에 사용됩니다.

Pascal 스타일 언어에서는 열거형을 배열 인덱스로 사용할 수도 있습니다.

  변화하다     슈트카운트: 배열 [카드 슈트]  정수; 

아다

Ada에서는 "="를 "is"로 대체하여 다음과 같은 정의를 남겼습니다.

유형 카수트  (클럽, 다이아몬드, 하트, 스페이드); 

에 더하여Pred,Succ,Val그리고.Pos또한 Ada는 다음을 통한 간단한 문자열 변환도 지원합니다.Image그리고.Value.

C 스타일 언어 Ada와 마찬가지로 열거형의 내부 표현을 지정할 수 있습니다.

위해서 카수트 사용하다   (클럽 => 1, 다이아몬드 => 2, 하트 => 4, 스페이드 => 8); 

C 스타일 언어와 달리 Ada는 열거형의 비트 수를 지정할 수도 있습니다.

위해서 카수트'크기 사용하다 4;  -- 4비트 

또한 Pascal과 같이 열거를 배열의 인덱스로 사용할 수 있지만 열거에 대해 정의된 속성이 있습니다.

   셔플 : 일정한 배열(카수트)  카수트 :=      (클럽 => 카수트'성공.(클럽), -- 'First', 'Last', 'Succ', 'Pred' 열거 속성 참조       다이아몬드 => 하트, --명시적인 값       하트 => 카수트'지난, --Cardsuit 타입의 첫 번째 열거치(예: 클럽)       스페이드 => 카수트'첫번째 --Cardsuit 타입의 마지막 열거치(예: 스페이드)       ); 

Modula-3 아다 과자처럼Boolean그리고.Character(패키지 "에 기재되어 있습니다)Standard") 열거형.Modula-3와는 달리 독자적인 문자 타입을 정의할 수도 있습니다.

유형 카드  ('7', '8', '9', 'J', 'Q', 'K', 'A'); 

C 언어 및 구문적으로 유사한 언어

C

프로그래밍 언어 C의 원래 K&R 방언에는 [1]열거형이 없었습니다.C에서는 열거는 명시적 정의에 의해 작성됩니다(enum키워드 자체로는 스토리지 할당이 발생하지 않습니다).enum키워드 및 구조유니언 정의를 연상시킵니다.

열거하다 카드 슈트 {     클럽,     다이아몬드,     하트,     스페이드 };  구조 카드 {     열거하다 카드 슈트 수트;     짧다 인트 가치; } [13];  열거하다 카드 슈트 으뜸패; 

C는 열거값의 정수표현을 프로그래머에게 직접 공개한다.정수와 열거 값을 자유롭게 혼합할 수 있으며 열거 값에 대한 모든 산술 연산이 허용됩니다.열거형 변수가 열거형 값을 나타내지 않는 정수를 유지할 수도 있습니다.사실, 언어 정의에 따르면, 위의 코드는 다음을 정의할 것이다.Clubs,Diamonds,Hearts,그리고.Spades활자의 상수로서int(이것들은 로만 변환됩니다).enum cardsuit해당 유형의 변수에 저장되어 있는지 확인합니다.

C는 프로그래머가 유형이 없어도 열거 상수의 값을 명시적으로 선택할 수 있도록 합니다.예를들면,

열거하다 카드 슈트 {     클럽    = 1,     다이아몬드 = 2,     하트   = 4,     스페이드   = 8 }; 

수학적인 수트 세트가 표현될 수 있도록 하는 유형을 정의하는데 사용될 수 있다.enum cardsuit비트 논리 연산에 의해 이루어집니다.

C#

C# 프로그래밍 언어의 열거형은 C의 enums의 "작은 정수" 시멘틱 대부분을 유지합니다.일부 산술 연산은 enum에 대해 정의되어 있지 않지만 enum 값을 명시적으로 정수로 변환했다가 다시 변환할 수 있으며 enum 변수에는 enum 정의에 의해 선언되지 않은 값을 포함할 수 있습니다.예를 들어,

열거하다 카수트 {     클럽,     다이아몬드,     스페이드,     하트 } 

표현법CardSuit.Diamonds + 1그리고.CardSuit.Hearts - CardSuit.Clubs(값의 순서를 밟거나 2개의 값 사이에 몇 개의 스텝이 있는지 확인하는 것이 이치에 맞기 때문에) 직접 허용됩니다만,CardSuit.Hearts * CardSuit.Spades는 이치에 맞지 않는 것으로 간주되며 값이 최초로 정수로 변환된 경우에만 허용됩니다.

또한 C#은 열거용 특정 정수값을 정의할 수 있는 C와 같은 기능을 제공합니다.이를 통해 열거에 대한 이진 연산을 수행할 수 있으므로 열거 값을 플래그 세트로 처리할 수 있습니다.이러한 플래그는 이진 연산을 사용하거나 Enum 유형의 기본 제공 'HasFlag' 메서드를 사용하여 테스트할 수 있습니다.

열거 정의는 선택한 정수 값의 이름을 정의하며 열거 [2][3][4]정의 범위에 포함되지 않는 다른 정수 값을 열거 변수에 할당할 수 있으므로 구문 설탕입니다.

C++

C++는 C에서 직접 상속되는 열거형을 가지고 있으며 열거형이 C++의 실제 유형이라는 점을 제외하고 대부분 이와 같이 작동합니다.또한 (구조와 마찬가지로) C++enum키워드는 자동으로 조합됩니다.typedef를 사용하면, 타입의 이름을 붙이는 대신에enum name이름만 대세요.name이는 typedef를 사용하여 C에서 시뮬레이트할 수 있습니다. typedef enum {Value1, Value2} name;

C++11스코프 열거라고 불리는 두 번째 종류의 열거도 제공합니다.이것들은 타입 세이프입니다. 열거자는 암묵적으로 정수 타입으로 변환되지 않습니다.이를 통해 열거형 I/O 스트리밍을 정의할 수 있습니다.범위 열거의 또 다른 기능은 열거자가 누출되지 않기 때문에 사용 시 열거 이름 앞에 접두사를 붙여야 한다는 것입니다(예:Color::Red아래 예의 첫 번째 열거자)의 경우,using enumdeclaration(C++20에서 도입)을 사용하여 열거자를 현재 범위로 가져옵니다.범위 열거는 구에 의해 지정됩니다.enum class(또는enum struct예를 들어 다음과 같습니다.

열거하다 학급 색. {빨간., 초록의, 파랑색}; 

열거형의 기본 유형은 모든 열거값을 포함할 수 있을 만큼 큰 구현 정의 정수형입니다. 가능한 최소 유형일 필요는 없습니다.기본 유형을 직접 지정할 수 있으므로 열거의 "전송 선언"이 가능합니다.

열거하다 학급 색. :  {빨간., 초록의, 파랑색};  // 크기 및 메모리 레이아웃에 '롱' 유형이 맞아야 합니다. 열거하다 학급 모양들 : ;  // 전달 선언.나중에 정의된 값이 'char'에 맞지 않으면 오류입니다. 

가세요

이동은 다음을 사용합니다.iota키워드를 지정하여 열거형 [5]상수를 만듭니다.

유형 바이트 사이즈 플로트 64  컨스턴트 (     _           = iota // 빈 식별자에 할당하여 첫 번째 값을 무시합니다.     KB 바이트 사이즈 = 1 << > (10 * iota)     MB     GB ) 

자바

Java 프로그래밍 언어의 J2SE 버전 5.0에서는 선언 구문이 C: 유사한 열거형 유형이 추가되었습니다.

열거하다 카수트 { 클럽, 다이아몬드, 스페이드, 하트 }; ... 카수트 으뜸패; 

그러나 Java 유형 시스템에서는 열거형을 정수와 다른 유형으로 취급하므로 열거형과 정수형을 혼재시킬 수 없습니다.실제로 Java의 열거형은 실제로는 산술형이 아닌 특수한 컴파일러 생성 클래스이며 열거값은 해당 클래스의 글로벌 사전 생성 인스턴스로 동작합니다.Enum 유형에는 인스턴스 메서드와 생성자를 사용할 수 있습니다(인수는 각 Enum 값에 대해 개별적으로 지정할 수 있습니다).모든 열거형은 암묵적으로 확장됩니다.Enum추상 수업열거 형식은 [6]직접 인스턴스화할 수 없습니다.

내부적으로 각 열거값에는 0부터 시작하는 소스 코드로 선언된 순서에 대응하는 정수가 포함됩니다.프로그래머는 열거값에 대한 사용자 정의 정수를 직접 설정할 수 없지만, 임의의 값을 열거 클래스의 자체 정의된 멤버에 할당할 수 있는 오버로드된 생성자를 정의할 수 있습니다.getters를 정의하면 이러한 자체 정의 멤버에 액세스할 수 있습니다.내부 정수는 다음 명령어를 사용하여 열거값에서 얻을 수 있습니다.ordinal()method 및 열거형 열거값 목록은 다음 명령을 사용하여 순서대로 가져올 수 있습니다.values()방법.프로그래머가 에넘을 정수로 변환하는 것은 일반적으로 권장되지 않습니다.[7]열거된 유형은 다음과 같습니다.Comparable내부 정수를 사용하여 정렬할 수 있습니다.

Java 표준 라이브러리는 열거와 함께 사용할 유틸리티 클래스를 제공합니다.EnumSet클래스는 a를 실행한다.Set비트 배열로 구현되므로 명시적인 비트 조작만큼 매우 콤팩트하고 효율적이지만 안전합니다.EnumMap클래스는 a를 실행한다.Mapenum 값을 객체로 지정합니다.배열로 구현되며 열거값의 정수값이 인덱스로 사용됩니다.

통사적 전통인 C의 동적 입력 언어(: Perl 또는 JavaScript)는 일반적으로 열거를 제공하지 않습니다.그러나 Perl 프로그래밍에서는 단축 문자열 목록과 해시(슬라이스일 가능성이 있음)를 사용하여 동일한 결과를 얻을 수 있습니다.

나의 @enum = qw(클럽 다이아몬드 하트 스페이드); 나의( %set1, %set2 ); @set1{@enum} = ();          # 모두 클리어 @set2{@enum} = (1) x @enum; # 모두 1로 설정 $set1{클럽} ...            # false $set2{다이아몬드} ...         # 참 

라쿠

Raku(이전의 Perl 6)는 열거를 지원합니다.Raku에서 열거를 선언하는 방법은 여러 가지가 있으며 모두 백엔드 맵을 만듭니다.

enum Cat <sphynx siamese 벵골 쇼트 에어 기타>; # "quote-words" 사용
enum Cat('sphynx', 'siamese', 'bengal', 'shorthair', 'other'), # 목록 사용
Enum Cat(sphynx = > 0,  = > 1, 벵골 = > 2, 쇼트 에어 = > 3, 기타 = > 4), # 쌍 생성자 사용
enum Cat ( : sphynx ( 0 ) , : siamese ( 1 ) , : bengal ( 2 ) , shortair ( 3 ) , : other ( 4 ) ; # 쌍을 사용하는 다른 방법으로는 ": 0sphynx" 를 사용할 수도 있습니다.

PHP

Enums는 PHP 버전 8.1에서 추가되었습니다.

열거하다 카드 슈트 {     사례. 하트;     사례. 다이아몬드;     사례. 클럽;     사례. 스페이드; } 

Rust가 사용하는 것은enumC와 같은 키워드는 태그 부착 결합을 기술하기 위해 사용됩니다.이러한 결합은 퇴화형식으로 간주될 수 있습니다.따라서 Rust의 Enum은 훨씬 더 유연하며 구조 및 태플 변형을 포함할 수 있습니다.

열거 메시지 { 종료, 이동 { x: i32, y: i32 }, // 구조 쓰기(String), // 단일 요소 튜플 ChangeColor(i32, i32), // 3 요소 튜플 }

재빠르다

C에서는 열거에 의해 일련의 정수 값에 관련된 이름이 할당됩니다.Swift에서 열거는 훨씬 더 유연하며 열거의 각 사례에 대한 값을 제공할 필요가 없습니다.각 열거 케이스에 대해 값(원시 값)이 제공되는 경우 값은 문자열, 문자 또는 정수 또는 부동소수점 유형의 값일 수 있습니다.

또는 열거 케이스는 다른 언어의 결합 또는 변형과 마찬가지로 각각의 다른 케이스 값과 함께 저장되는 모든 유형의 관련 값을 지정할 수 있다.관련된 케이스의 공통 세트를 하나의 열거의 일부로 정의할 수 있으며, 각 열거에는 관련된 적절한 유형의 값 세트가 서로 다릅니다.

Swift에서 열거는 퍼스트 클래스 유형입니다.이들은 열거의 현재 값에 대한 추가 정보를 제공하는 계산 속성 및 열거가 나타내는 값과 관련된 기능을 제공하는 인스턴스 메서드와 같이 전통적으로 클래스에서만 지원되는 많은 기능을 채택합니다.열거는 초기 케이스 값을 제공하기 위해 이니셜라이저를 정의할 수도 있고 원래 구현 이상으로 기능을 확장하도록 확장할 수도 있습니다. 또한 표준 기능을 제공하기 위해 프로토콜을 준수할 수도 있습니다.

열거하다 카드 슈트 {     사례. 클럽     사례. 다이아몬드     사례. 하트     사례. 스페이드 } 

C 및 Objective-C와 달리 Swift 열거 케이스에는 생성 시 기본 정수 값이 할당되지 않습니다.위의 CardSuit 예에서는 클럽, 다이아몬드, 하트 및 스페이드는 암묵적으로0, 1, 2, 3과 같지 않습니다.대신, 다른 열거 케이스는 명시적으로 정의된 유형의 CardSuit와 함께 그 자체로 완전한 값입니다.

콤마로 구분하여 한 줄에 여러 개의 케이스를 표시할 수 있습니다.

열거하다 카드 슈트 {     사례. 클럽, 다이아몬드, 하트, 스페이드 } 

정수 또는 문자열 raw 값을 저장하는 열거를 사용할 경우 Swift가 값을 자동으로 할당하므로 각 케이스에 대해 raw 값을 명시적으로 할당할 필요가 없습니다.

예를 들어 raw 값에 정수를 사용하는 경우 각 케이스의 암묵적인 값은 이전 케이스보다 1개 더 많습니다.첫 번째 케이스에 값이 설정되어 있지 않은 경우 값은 0입니다.

아래 열거는 태양으로부터의 각 행성의 순서를 나타내는 정수 원시 값을 사용하여 이전의 행성 열거를 개량한 것입니다.

열거하다 행성: 내부 {     사례. 수성. = 1, 금성, 지구, 마스, 목성, 토성, 천왕성, 해왕성 } 

위의 예에서 Planet.mercury의 명시적인 raw 값은 1, Planet입니다.비너스는 암묵적인 원시 값 2를 갖습니다.

"자세한 내용은 여기 Swift 문서를 참조하십시오.

타입 스크립트

TypeScript는 JavaScript에 'enum' 데이터 유형을 추가합니다.

열거하다 카수트 {클럽, 다이아몬드, 하트, 스페이드}; 변화하다 c: 카수트 = 카수트.다이아몬드; 

디폴트로는 enums는 0부터 시작하는 멤버의 수를 지정합니다.이는 첫 번째 값을 설정하여 덮어쓸 수 있습니다.

열거하다 카수트 {클럽 = 1, 다이아몬드, 하트, 스페이드}; 변화하다 c: 카수트 = 카수트.다이아몬드; 

모든 값을 설정할 수 있습니다.

열거하다 카수트 {클럽 = 1, 다이아몬드 = 2, 하트 = 4, 스페이드 = 8}; 변화하다 c: 카수트 = 카수트.다이아몬드; 

TypeScript는 이름에 숫자 값을 매핑할 수 있습니다.예를 들어 값 2의 이름을 찾습니다.

열거하다 카수트 {클럽 = 1, 다이아몬드, 하트, 스페이드}; 변화하다 슈트명: 스트링 = 카수트[2];  경계.(슈트명); 

파이썬

모듈은 버전 3.4에서 Python 표준 라이브러리에 추가되었습니다.

부터 열거하다 수입품 열거형 학급 카드(열거형):     클럽 = 1     다이아몬드 = 2     하트 = 3     스페이드 = 4 

또한 자동으로 생성된 인덱스를 사용하여 열거를 작성하는 기능 API도 있습니다(1개부터 시작).

카드 = 열거형('카드', '클럽 다이아몬드 하트 스페이드') 

Python 열거는 의미적 정확성을 강제하지 않습니다(호환되지 않는 열거와 의미 없는 비교는 항상 TypeError를 발생시키지 않고 False를 반환합니다).

>>>색. = 열거형("컬러", "레드 그린 블루") >>>모양. = 열거형("모양", ["원", "트리앵글", "사각형", '헥사곤']) >>>방어하다 has_discloses(모양.): ... 돌아가다 모양. != 모양..원형 ... >>>has_discloses(색..초록의) 진실의 

포트란

Fortran은 C와의 상호 운용성을 위해 열거형만 가지고 있습니다.따라서 의미론은 C와 비슷하며 C와 마찬가지로 열거형 값은 정수일 뿐 더 이상의 유형 검사는 수행되지 않습니다.위의 C 예는 Fortran에서 다음과 같이 기술할 수 있습니다.

열거하다, 묶다( C )   열거자 :: 클럽 = 1, 다이아몬드 = 2, 하트 = 4, 스페이드 = 8 엔드 열거 

Visual Basic/VBa

Visual Basic(버전 6까지) 및 VBA에서 열거된 데이터 유형은 자동으로 ""에 할당됩니다.Longdatatype을 입력하고, 그 자체도 datatype이 됩니다.

'제로 베이스 열거형 카드 슈트     클럽     다이아몬드     하트     스페이드 끝. 열거형  후보선수 EnumExample(예)()     어둡다 수트 ~하듯이 카드 슈트     수트 = 다이아몬드     메시지 박스 수트 끝. 후보선수 

VB의 코드 예네트워크

열거형 카드 슈트     클럽     다이아몬드     하트     스페이드 끝. 열거형  후보선수 EnumExample(예)()     어둡다 수트 ~하듯이 카드 슈트     수트 = 카드 슈트.다이아몬드     메시지 박스.표시하다(수트) 끝. 후보선수 

리스프

Common Lisp는 멤버 유형 지정자를 사용합니다.

(기능하지 않다 카드 슈트 ()   '(멤버 클럽 다이아몬드 마음 스페이드)) 

그 물체는 카수트 타입이라고 말한다.#'eql몽둥이, 다이아몬드, 하트, 스페이드.그러나 멤버 유형 지정자는 Common Lisp Object System(CLOS) 매개 변수 지정자로 사용할 수 없습니다.대신,(eql atom)이것은, 에 상당합니다.(member atom)를 사용할 수 있습니다(즉, eql 타입 지정자로 지정할 수 있는 것은 세트의 1개의 멤버뿐이지만 CLOS 파라미터 스페셜라이저로 사용할 수 있습니다).즉, 열거된 유형을 포함하는 메서드를 정의하려면 해당 유형의 각 특정 요소에 대해 메서드를 정의해야 합니다.

또한.

(기능하지 않다 유한자집합형 (휴식 요소들)    `(멤버 ,@요소들)) 

실행 시 임의 열거 유형을 정의하는 데 사용할 수 있습니다.예를 들어.

(유한자집합형 클럽 다이아몬드 마음 스페이드) 

카드수트의 사전 정의와 동등한 유형을 언급할 것이다, 물론 단순히 사용했을 것이다.

(멤버 클럽 다이아몬드 마음 스페이드) 

단, 기능과 혼동하지 않을 수 있습니다.#'member문체상의 이유로

다트

Dart는 가장 기본적인 형식의 enum을 지원하며 enum을 지원하는 다른 언어와 구문도 매우 유사합니다.

열거하다 카드 스위트 {   클럽,   다이아몬드,   하트,   스페이드 }  무효 주된() {   카드 스위트 카드 = 카드 스위트.클럽;    // Dart는 "switch" 연산자를 사용하여 열거형 값을 원하는 출력과 일치시킵니다.   전환하다 (카드) {     사례. 카드 스위트.클럽: {       인쇄물("클럽');     }     브레이크.;      사례. 카드 스위트.다이아몬드: {       인쇄물('다이아몬드');     }     브레이크.;      사례. 카드 스위트.하트: {       인쇄물('하트');     }     브레이크.;      사례. 카드 스위트.스페이드: {       인쇄물(스페이드);     }     브레이크.;      체납: {       인쇄물("알 수 없음");     }     브레이크.;   } } 

스위치 오퍼레이터가 케이스의 완전성을 보증하는 것은 아닙니다.즉, 1개의 케이스를 생략하면 컴파일러는 에러를 발생시키지 않습니다.

함수 프로그래밍의 대수 데이터 유형

ML 계통의 함수 프로그래밍 언어(예: 표준 ML(SML), OCamlHaskell)에서는 늘 생성자만 있는 대수 데이터 유형을 사용하여 열거형 유형을 구현할 수 있습니다.예를 들어 (SML 시그니처의 구문에서는) 다음과 같습니다.

데이터형 카드 슈트 = 클럽   다이아몬드   하트   스페이드 유형 카드 = { 수트: 카드 슈트; 가치: 인트 }   : 카드 목록.  으뜸패 : 카드 슈트 

이러한 언어에서 작은 정수 표현은 프로그래머로부터 완전히 숨겨져 있으며, 이러한 표현은 실제로 구현에 의해 사용된다.하지만, 해스켈이 가지고 있는 것은Enum 타입과 타입 사이의 매핑을 취득하기 위해 타입이 파생 또는 실장할 수 있는 타입 클래스Int.

데이터베이스

일부 데이터베이스는 열거 유형을 직접 지원합니다.MySQL은 열거형 유형을 제공합니다.ENUM테이블 작성 시 문자열로 지정된 허용 값을 사용합니다.값은 숫자 인덱스로 저장되며 빈 문자열은 0으로 저장되고 첫 번째 문자열 값은 1로 저장되며 두 번째 문자열 값은 2로 저장됩니다.값은 숫자 인덱스 또는 문자열 [8]값으로 저장 및 검색할 수 있습니다.

예:

만들다 테이블 셔츠 (     이름. 바샤르(40),     크기 열거하다('x-small', '작다', '중간', '대형', '대형') ); 

XML 스키마

XML 스키마는 문자열과 같은 대부분의 원시 데이터 유형을 제한하는 데 사용되는 열거 패싯을 통해 열거 유형을 지원합니다.

<클릭: 개요 이름="카드수트">   <x: simple Type>     <설명: 설명> 베이스="문자열: 문자열">       <메시지: 열거 값="클럽'/>       <메시지: 열거 값='다이아몬드'/>       <메시지: 열거 값='하트'/>       <메시지: 열거 값=스페이드/>     </private: 설명>   </xs: simple Type> </filename: 삭제> 

「 」를 참조해 주세요.

레퍼런스

  1. ^ Kernighan, Brian W.; Ritchie, Dennis M. (February 1978). The C Programming Language (1st ed.). Englewood Cliffs, NJ: Prentice Hall. ISBN 0-13-110163-3.
  2. ^ Obasanjo, Dare (2007). "A Comparison of Microsoft's C# Programming Language to Sun Microsystems' Java Programming Language". Archived from the original on 2007. Retrieved 2012-09-06. In Java, enumerated types are a full fledged class which means they are typesafe and can be extended by adding methods, fields or even implementing interfaces. Whereas in C#, an enumerated type is simply syntactic sugar around an integral type (typically an int) meaning they cannot be extended and are not typesafe.
  3. ^ Gruntz, Dominik, Prof. Dr. (2005-04-08). "Java 5: Taming the Tiger: Syntactic Sugar" (in German). Fachhochschule Aargau, Nordwestschweiz. Archived from the original on 2007-01-07. Retrieved 2012-09-10. Enumerationen sind die heimlichen Sieger von Java 1.5. Nach vielen Beteuerungen durch Sun, Enums seien in Java überflüssig und können einfach nachgebildet werden, wurden sie nun doch eingeführt. Die einfachste Möglichkeit einer Enumeration der Jahreszeiten sieht wie folgt aus … Das Schlüsselwort enum steht für eine spezielle Art von Klasse, die eine Enumeration definiert. … Im Gegensatz zu anderen Programmiersprachen wie C/C++ und C# kann man ihnen per Gleichheitszeichen keine ganzen Zahlen zuordnen. Alt URL
  4. ^ Truter, Christoff (2011-08-04). "Syntactic sugar (C#): Enum". CSTrüter. Archived from the original on 2011-08-04. Retrieved 2012-09-10. // Poorly designed enum don't do this … Obviously (like with everything else), we can misuse this piece of sugar ending up with a system suffering from hyperglycemia. … Seeing as the underlying type of our enum is an int (can also use other integral types) it can lead to some interesting issues when using an enum as bit flags via bitwise operators.
  5. ^ "Effective Go". golang.org. The Go Authors. Retrieved 2014-05-13.
  6. ^ "Enum Types". Oracle. Retrieved 2013-12-05.
  7. ^ Bloch, Joshua (2008). Effective Java (Second ed.). Upper Saddle River, N.J.: Addison-Wesley. p. 158. ISBN 978-0-321-35668-0.
  8. ^ "MySQL :: MySQL 8.0 Reference Manual :: 11.3.5 The ENUM Type". dev.mysql.com. Retrieved 19 September 2021.

외부 링크