列挙型

フリー百科事典ウィキペディアより
ナビゲーションにジャンプ 検索にジャンプ

コンピューター プログラミングでは列挙型( R プログラミング言語ではenumerationenum、またはfactorとも呼ばれ、統計でカテゴリ変数とも呼ばれます) は、 elementsmembersenumeral、またはenumeratorsと呼ばれる名前付きののセットで構成されるデータ型です。タイプ。列挙子の名前は通常、言語で定数として動作する識別子です。列挙型は、の縮退したタグ付き共用体と見なすことができます。ユニットタイプ列挙型を持つと宣言された変数には、任意の列挙子を値として割り当てることができます。つまり、列挙型には、互いに異なる値があり、比較して割り当てることができますが、コンピューターのメモリに特定の具体的な表現があるとプログラマーによって指定されていません。コンパイラとインタプリタはそれらを任意に表すことができます。

たとえば、トランプの 1組の 4 つのスーツは、 ClubDiamondHeart、およびSpadeという名前の 4 つの列挙子であり、 suitという名前の列挙型に属している場合があります変数Vがそのデータ型として適していると宣言されている場合、それらの 4 つの値のいずれかをそれに割り当てることができます。

通常、列挙子は区別されますが、一部の言語では、型の宣言で同じ列挙子を 2 回リストすることが許可される場合があります。列挙子の名前は、意味的に完全である必要も、互換性がある必要もありません。たとえば、colorという列挙型は、列挙子RedGreenZebraMissing、およびBaconで構成されるように定義できます一部の言語では、列挙型の宣言によって、そのメンバーの順序も意図的に定義されます。他のものでは、列挙子は順不同です。さらに、列挙子を整数として具体的に表すコンパイラから暗黙的な順序付けが行われる場合もあります。

一部の列挙型は、言語に組み込まれている場合があります。たとえば、ブール型は、多くの場合、値 False および True の事前定義列挙です多くの言語では、ユーザーが新しい列挙型を定義できます。

列挙型の値と変数は、通常、基になる表現として何らかの整数型で実装されます。一部の言語、特にシステム プログラミング言語では、ユーザーが各列挙子に使用するビットの組み合わせを指定できます。これは、一連の列挙子を固定長のビット文字列として効率的に表すのに役立ちます。型理論では、列挙型は多くの場合ユニット型のタグ付き共用体と見なされますそのような型は次の形式であるため、、自然数と書くこともあります。

根拠

一部の初期のプログラミング言語には、もともと列挙型がありませんでした。プログラマーがmyColorなどの変数に red の値を持たせたい場合、変数 red が宣言され、任意の値 (通常は整数定数) が割り当てられます。次に、変数 red がmyColorに割り当てられます。他の手法では、列挙子の名前を含む文字列に任意の値が割り当てられました。

これらの任意の値は、数値がどのように取得されたか、またはそれらの実際の値が重要であるかどうかについての説明がないことが多いため、マジック ナンバーと呼ばれることがありました。これらのマジック ナンバーにより、他のユーザーがソース コードを理解して維持することが難しくなる可能性があります。

一方、列挙型は、コードをより自己文書化します。言語によっては、コンパイラが列挙子にデフォルト値を自動的に割り当てることができるため、不要な詳細をプログラマから隠すことができます。これらの値は、プログラマには見えない場合もあります (情報の非表示を参照)。列挙型は、列挙子の値に対して数学演算を実行するなど、プログラマが非論理的なコードを作成するのを防ぐこともできます。列挙子が割り当てられた変数の値が出力される場合、一部のプログラミング言語は、基になる数値ではなく、列挙子の名前も出力できます。さらなる利点は、列挙型を使用すると、コンパイラがセマンティックの正確性を強制できることです。例: myColor = TRIANGLE 禁止することができますが、 myColor = REDTRIANGLEREDの両方が内部的に1として表されてい ても、受け入れられます。

概念的には、列挙型は名義(数値コード)のリストに似ています。これは、型の可能な各値に固有の自然数が割り当てられるためです。したがって、特定の列挙型は、この概念の具体的な実装です。順序が意味のある場合、および/または比較に使用される場合、列挙型は序数型になります。

規約

プログラミング言語には、独自の、多くの場合複数のプログラミング スタイル命名規則がある傾向があります。列挙型に割り当てられる変数は、通常、単数形の名詞であり、PascalCaseまたは大文字の慣例に従うことがよくありますが、小文字などはあまり見られません。

いくつかのプログラミング言語の構文

Pascal と構文的に類似した言語

パスカル

Pascalでは、括弧で囲まれたリストに値をリストすることで、列挙型を暗黙的に宣言できます。

  var 
    suit :  (クラブ, ダイヤモンド, ハート, スペード) ;

宣言は、複数の変数に使用できるように、型シノニム宣言に表示されることがよくあります。

  type 
    cardsuit  =  (クラブ ダイヤモンド ハート スペード) ; 
    card  = レコード
             スーツ:  cardsuit ; 
             :  1  ..  13 ; 
           終わり; 
  var 
    hand : 配列 [  1  ..  13  ]  of  card ; 
    トランプ カードスーツ

列挙値が与えられる順序は重要です。列挙型は序数型であり、関数predsucc関数は列挙の前または次の値を提供し、ord列挙値を整数表現に変換できます。ただし、標準の Pascal では、算術型から列挙型への変換は提供されていません。Extended Pascal は、拡張関数を介してこの機能を提供しますsucc他のいくつかの Pascal 方言では、型キャストを介して許可されます。Modula-3など、Pascal のいくつかの最新の子孫は、VAL;と呼ばれるメソッドを使用して特別な変換構文を提供します。Modula-3 では、標準ASCIIBOOLEANのandCHARを特別な事前定義された列挙型および用途としてORD扱います。VALデコードとエンコード。

Pascal スタイルの言語では、列挙型を配列インデックスとして使用することもできます。

  var 
    suitcount : 整数配列 [ cardsuit ]  ; 

エイダ

Adaでは、「=」の使用が「is」に置き換えられ、定義は非常に似ています。

 カードスーツの種類 ( クラブダイヤ ハート スペード )です。

、 、およびに加えてPred、 Ada はおよびを介した単純な文字列変換もサポートしています。 SuccValPosImageValue

C スタイル言語と同様に、Ada では列挙型の内部表現を指定できます。

 カードスーツ (クラブ=> 1 
  ダイヤ=> 2 ハート=> 4 スペード=> 8 ) ;           

C スタイルの言語とは異なり、Ada では列挙のビット数を指定することもできます。

Cardsuit  'サイズ使用4の場合-- 4 ビット    

さらに、Pascal のように配列のインデックスとして列挙を使用できますが、列挙に対して定義された属性があります。

   Shuffle  :  Cardsuit := ( Clubs => Cardsuit ' Succ ( Clubs )定数 配列( Cardsuit )  , -- 列挙型の属性を参照 'First, 'Last, 'Succ, 'Pred Diamonds => Hearts , -- 明示的な値Hearts => Cardsuit ' Last , --Cardsuit 型の最初の列挙値、例: clubs Spades => Cardsuit ' First --Cardsuit 型の最後の列挙値、例: spades );  
        
         
         
         
      

Modula-3と同様に、 Ada はBooleanandCharacterを特別な定義済み (パッケージ " Standard" 内) の列挙型として扱います。Modula-3 とは異なり、独自の文字タイプを定義することもできます:

type  Cards  is  (' 7 ',  ' 8 ',  ' 9 ',  ' J ',  ' Q ',  ' K ',  ' A ');

C と構文的に類似した言語

C

プログラミング言語Cの元のK&R方言には、列挙型がありませんでした。[1] C では、列挙は明示的な定義 (キーワード自体はストレージの割り当てを引き起こしません) によって作成されます。これはキーワードを使用し、構造体および共用体の定義 を連想させます。enumenum

enum cardsuit {  
    クラブ,
    ダイヤモンド,
    ハーツ,
    スペード
};

構造 カード{ 
    enum cardsuitスーツ;  
    短い整数;  
}[ 13 ]; 

enum cardsuit切り札;  

C は、列挙値の整数表現をプログラマーに直接公開します。整数と列挙値は自由に混在させることができ、列挙値に対するすべての算術演算が許可されます。列挙型変数が列挙値を表さない整数を保持することさえ可能です。実際、言語定義によれば、上記のコードはClubsDiamondsHearts、およびSpadesを type の定数として定義し、それらがその型の変数に格納されている場合に intのみ (サイレントに) に変換されます。enum cardsuit

C では、型がなくても、列挙型定数の値をプログラマが明示的に選択することもできます。例えば、

enum cardsuit {  
    クラブ= 1 ,     
    ダイヤモンド= 2   
    ハート= 4 ,    
    スペード= 8    
};

enum cardsuitビットごとの論理演算によって スーツの数学的セットを表現できる型を定義するために使用できます。

C#

C#プログラミング言語の列挙型は、 C の列挙型の "小さな整数" セマンティクスのほとんどを保持します。一部の算術演算は enum に対して定義されていませんが、enum 値は明示的に整数に変換して戻すことができ、enum 変数は enum 定義で宣言されていない値を持つことができます。たとえば、与えられた

enum  Cardsuit 
{
    クラブ
    ダイヤモンド
    スペード
    ハート
}

(一連の値をステップスルーするか、2 つの値の間にいくつのステップがあるかを尋ねることが理にかなっている可能性があるため)、式は直接許可されますが、CardSuit.Diamonds + 1あまり意味がないと見なされ、値が最初に整数に変換される場合にのみ許可されます。 . CardSuit.Hearts - CardSuit.ClubsCardSuit.Hearts * CardSuit.Spades

C# には、列挙型の特定の整数値を定義できる C に似た機能もあります。これにより、列挙に対して二項演算を実行できるため、列挙値をフラグのセットとして扱うことができます。これらのフラグは、二項演算または Enum 型の組み込み 'HasFlag' メソッドを使用してテストできます。

列挙定義は、選択された整数値の名前を定義し、列挙定義のスコープにない他の整数値を列挙変数に割り当てることができるため、構文糖衣です。[2] [3] [4]

C++

C++には、C から直接継承された列挙型があり、C++ では列挙型が実数型であり、コンパイル時のチェックが追加されていることを除いて、ほとんどこれらのように機能します。また、(構造体と同様に) C++enumキーワードは自動的にtypedefと結合されるため、 type に名前を付ける代わりにenum name、単に名前を付けnameます。これは、typedef を使用して C でシミュレートできます。typedef enum {Value1, Value2} name;

C++11には、スコープ付き列挙と呼ばれる 2 番目の種類の列挙も用意されていますこれらはタイプ セーフです。列挙子は暗黙的に整数型に変換されません。特に、これにより、列挙型に対して I/O ストリーミングを定義できます。スコープ列挙型のもう 1 つの機能は、列挙子がリークしないことです。そのため、 ( C++20で導入された) 宣言が使用されていColor::Redない限り、使用するには列挙型の名前を前に付ける必要があります (たとえば、以下の例の最初の列挙子)。列挙子を現在のスコープに取り込みます。範囲指定された列挙は、句(または) によって指定されます。例えば: using enumenum classenum struct

enum  class Color {};    

列挙型の基になる型は、すべての列挙値を保持するのに十分な大きさの実装定義の整数型です。最小のタイプである必要はありません。基になる型を直接指定できるため、列挙の「前方宣言」が可能になります。

enum  class Color : long {,,}; // タイプ 'long' enum class Shapes : charのサイズとメモリ レイアウトに適合する必要があります。// 前方宣言。後で「char」に収まらない値が定義されている場合、それはエラーです。        
      

[

Goは、iotaキーワードを使用して列挙定数を作成します。[5]

タイプ ByteSize  float64

const  ( 
    _            =  iota  // 空白の識別子に割り当てて最初の値を無視する
    KB  ByteSize  =  1  <<  ( 10  *  iota ) 
    MB 
    GB 
)

ジャバ

Java プログラミング言語の J2SE バージョン 5.0では、宣言構文がCの構文に似ている列挙型が追加されました

enum  Cardsuit  {  CLUBS  DIAMONDS  SPADES  HEARTS  }; 
...
カードスーツ トランプ;

ただし、Java 型システムは列挙型を整数とは別の型として扱い、列挙型と整数値を混在させることはできません。実際、Java の列挙型は、実際には算術型ではなく、コンパイラによって生成された特別なクラスであり、列挙型の値は、そのクラスの事前に生成されたグローバルなインスタンスとして動作します。列挙型には、インスタンス メソッドとコンストラクター (列挙値ごとに引数を個別に指定できます) を含めることができます。すべての列挙型は、Enum抽象クラスを暗黙的に拡張します。列挙型は直接インスタンス化できません。[6]

内部的には、各列挙値には、ソース コードで宣言されている順序に対応する 0 から始まる整数が含まれています。 enum クラスの自己定義メンバーへの任意の値。ゲッターを定義すると、これらの自己定義メンバーにアクセスできるようになります。内部整数はメソッドを使用して列挙値から取得でき、ordinal()メソッドを使用して列挙型の列挙値のリストを順番に取得できますvalues()一般に、プログラマーが列挙型を整数に、またはその逆に変換することはお勧めできません。[7]列挙型はComparableで、内部整数を使用します。その結果、並べ替えることができます。

Java 標準ライブラリには、列挙型で使用するユーティリティ クラスが用意されています。このEnumSetクラスはSet、列挙値の を実装します。これはビット配列として実装されているため、非常にコンパクトで、明示的なビット操作と同じくらい効率的ですが、より安全です。このEnumMapクラスは、Mapオブジェクトに列挙値の を実装します。これは配列として実装され、列挙値の整数値がインデックスとして機能します。

パール

C の構文上の伝統に基づく動的型付け言語 ( PerlJavaScriptなど) は、一般に、列挙型を提供しません。しかし、Perl プログラミングでは、省略形の文字列 リストハッシュ(場合によってはslices ) を使用して同じ結果を得ることができます。

my  @enum  =  qw(Clubs Diamonds Hearts Spades) ; 
(  %set1 ,  %set2  ); 
@set1 { @enum }  =  ();           # すべてクリア
@set2 { @enum }  =  ( 1 )  x  @enum ;  # すべて 1 に設定
$set1 {クラブ}  ...             # false 
$set2 {ダイヤモンド}  ...          # true

Raku (旧称 Perl 6) は列挙型をサポートしています。Raku で列挙を宣言するには複数の方法があり、すべてバックエンド Map を作成します。

enum  Cat  <スフィンクス シャム ベンガル ショートヘア その他> ; # 「引用語」の使用
enum  Cat ( 'スフィンクス' , 'シャム' , 'ベンガル' , 'ショートヘア' , 'その他' ); # リストの使用
enum  Cat (スフィンクス=> 0 ,シャム= > 1 ,ベンガル=> 2 ,ショートヘア=> 3 ,その他=> 4 ); # ペア コンストラクターの使用
enum (:スフィンクス( 0 ), :シャム( 1 ), :ベンガル( 2 ),ショートヘア( 3 ), :その他( 4 )); # ペアを使用する別の方法として、`:0sphynx` を使用することもできます

PHP

Enum は PHP バージョン 8.1 で追加されました。

enum  CardSuit 
{
    ケース ハーツ; 
    ケース ダイヤモンド; 
    ケース クラブ; 
    ケース スペード; 
}

さび

Rust はenumC のようなキーワードを使用しますが、タグ付けされた unionを記述するために使用します。この列挙型は縮退形式と見なすことができます。したがって、Rust の列挙型はより柔軟で、構造体とタプルのバリアントを含めることができます。

列挙型 メッセージ{ 
    やめて、
    Move { x : i32 , y : i32 }, // struct Write ( String ), // 単一要素のタプルChangeColor ( i32 , i32 , i32 ), // 3 要素のタプル}     
     
       

スウィフト

C では、列挙は関連する名前を一連の整数値に割り当てます。Swiftでは、列挙ははるかに柔軟で、列挙の各ケースに値を提供する必要はありません。値 (の値と呼ばれる) が列挙のケースごとに提供される場合、その値は、文字列、文字、または任意の整数型または浮動小数点型の値にすることができます。

あるいは、列挙ケースでは、他の言語でユニオンやバリアントが行うのと同じように、任意の型の関連付けられた値をそれぞれの異なるケース値とともに格納するように指定できます。関連するケースの共通セットを 1 つの列挙の一部として定義できます。各列挙には、関連付けられた適切な型の異なる値のセットがあります。

Swift では、列挙型は第一級の型です。これらは、列挙の現在の値に関する追加情報を提供する計算されたプロパティや、列挙が表す値に関連する機能を提供するインスタンス メソッドなど、従来はクラスによってのみサポートされていた多くの機能を採用しています。列挙型は、イニシャライザを定義して初期ケース値を提供することもでき、拡張して元の実装を超えて機能を拡張することもできます。また、プロトコルに準拠して標準機能を提供できます。

enum  CardSuit  {
    ケース クラブ
    ケース ダイヤモンド
    ケース ハート
    ケース スペード
}

C やObjective-Cとは異なり、Swift の列挙型ケースには、作成時にデフォルトの整数値が割り当てられません。上記の CardSuit の例では、クラブ、ダイアモンド、ハート、およびスペードは、暗黙的に 0、1、2、および 3 に等しいわけではありません。代わりに、さまざまな列挙ケースは、明示的に定義された型の CardSuit を使用して、それ自体が完全な値です。 .

コンマで区切って、複数のケースを 1 行に表示できます。

enum  CardSuit  {
    ケース クラブ ダイヤモンド ハート スペード
}

整数または文字列の raw 値を格納する列挙を使用する場合、Swift が自動的に値を割り当てるため、ケースごとに明示的に raw 値を割り当てる必要はありません。

たとえば、生の値に整数が使用される場合、各ケースの暗黙の値は前のケースよりも 1 大きくなります。最初のケースに値が設定されていない場合、その値は 0 です。

以下の列挙は、太陽からの各惑星の順序を表す整数の生の値を使用して、以前の Planet 列挙を改良したものです。

enum  Planet :  Int  {
    ケース 水銀 =  1 , 金星, 地球, 火星, 木星, 土星, 天王星, 海王星
}

上記の例では、Planet.mercury の明示的な raw 値は 1、Planet.venus の暗黙的な raw 値は 2 などです。

「詳細は、オンラインの Swift のドキュメント (こちら) にあります。」

タイプスクリプト

TypeScript は、JavaScript に「enum」データ型を追加します。

enum  Cardsuit  {クラブ ダイヤ ハート スペード}; 
var  c :  Cardsuit  =  Cardsuit . ダイヤモンド;

デフォルトでは、0 から始まる番号のメンバーを列挙します。これは、最初の値を設定することでオーバーライドできます。

enum  Cardsuit  { Clubs  =  1 ,  Diamonds ,  Hearts ,  Spades }; 
var  c :  Cardsuit  =  Cardsuit . ダイヤモンド;

すべての値を設定できます。

enum  Cardsuit  {クラブ =  1  ダイヤ =  2  ハート =  4  スペード =  8 }; 
var  c :  Cardsuit  =  Cardsuit . ダイヤモンド;

TypeScript は、数値をその名前にマッピングすることをサポートしています。たとえば、これは値 2 の名前を検索します。

enum  Cardsuit  { Clubs  =  1 ,  Diamonds ,  Hearts ,  Spades }; 
var  suitName :  string  =  Cardsuit [ 2 ];

アラート(スーツ名);

パイソン

enumバージョン 3.4 で Python 標準ライブラリにモジュールが追加されました

from  enum  import  Enum 
class  Cards ( Enum ): 
    CLUBS  =  1 
    DIAMONDS  =  2 
    HEARTS  =  3 
    SPADES  =  4

自動生成されたインデックス (1 から始まる) を使用して列挙を作成するため の関数 APIもあります。

Cards  =  Enum ( 'Cards' ,  'CLUBS DIAMONDS HEARTS SPADES' )

Python の列挙型は、セマンティックの正しさを強制しません (互換性のない列挙型との無意味な比較は、 TypeErrorを上げるのではなく、常にFalseを返します):

>>> Color  =  Enum ( "Color" ,  "RED GREEN BLUE" ) 
>>> Shape  =  Enum ( "Shape" ,  [ "CIRCLE" ,  "TRIANGLE" ,  "SQUARE" ,  "HEXAGON" ]) 
>>> def  has_vertices ( shape ): 
... 	return  shape  !=  Shape . CIRCLE 
... 
>>> has_vertices ( Color . GREEN ) 
True

フォートラン

Fortranには、C との相互運用性のために列挙型しかありません。したがって、セマンティクスは C に似ており、C と同様に、列挙値は単なる整数であり、それ以上の型チェックは行われません。上記の C の例は、Fortran で次のように記述できます。

enum ,  bind (  C  ) 
  enumerator  ::  CLUBS  =  1 ,  DIAMONDS  =  2 ,  HEARTS  =  4 ,  SPADES  =  8 
end enum

Visual Basic/VBA

Visual Basic (バージョン 6 まで) およびVBAの列挙型データ型には、自動的に " Long" データ型が割り当てられ、それ自体がデータ型にもなります。

'ゼロベースの
列挙 型 CardSuit 
    Clubs 
    Diamonds 
    Hearts 
    Spades 
End  Enum

Sub  EnumExample () 
    Dim スーツ As  CardSuit
    スーツ =  Diamonds 
    MsgBox スーツ
End  Sub

VB.NETのコード例

Enum  CardSuit 
    Clubs 
    Diamonds 
    Hearts 
    Spades 
End  Enum

Sub  EnumExample () 
    Dim  suit  CardSuit suit = CardSuitとして ダイヤモンドメッセージ ボックス. show (スーツ) End Sub
      
    
 

Lisp

Common Lispはメンバー型指定子を使用します。

( deftype  cardsuit  () 
  ' (メンバー クラブ ダイヤ ハート スペード))

#'eqlクラブ、ダイヤモンド、ハート、スペードの場合、オブジェクトのタイプはカードスーツであると述べています。ただし、メンバー型指定子は、 Common Lisp Object System (CLOS) のパラメーター スペシャライザーとしては有効ではありません。代わりに(eql atom)、 と同等の を(member atom)使用できます (つまり、セットの 1 つのメンバーのみを eql 型指定子で指定できますが、CLOS パラメーター スペシャライザーとして使用できます)。つまり、メソッドを定義するには列挙型をカバーするには、その型の特定の要素ごとにメソッドを定義する必要があります。

さらに、

( deftype 有限要素集合型 ( &rest 要素) 
   ` (メンバー ,@要素))

実行時に任意の列挙型を定義するために使用できます。例えば

(有限要素集合型 クラブ ダイヤ ハート スペード)

cardsuit の以前の定義と同等の型を参照します。

(会員 クラブ ダイヤ ハート スペード)

#'memberただし、文体上の理由により 、関数との混乱が少なくなる場合があります。

ダーツ

Dartは最も基本的な形式の列挙型をサポートしており、列挙型をサポートする他の言語とよく似た構文を持っています。

enum  CardSuite  {
  クラブ,
  ダイヤモンド,
  ハーツ,
  スペード
}

ボイド メイン() {
  CardSuite カード =  CardSuite . クラブ;

  // Dart は「switch」演算子を使用して、列挙型の値を目的の出力と一致させます。
  スイッチ カード {
    ケース カードスイートクラブ:  {
      print ( "クラブ" );
    }
    休憩;

    ケース カードスイートダイヤモンド:  {
      print ( 「ダイヤモンド」);
    }
    休憩;

    ケース カードスイートハート:  {
      print ( "ハート" );
    }
    休憩;

    ケース カードスイートスペード:  {
      print ( "スペード" );
    }
    休憩;

    デフォルト:  {
      印刷( 「不明」);
    }
    休憩;
  }
}

switch 演算子は、ケースの完全性を保証しないことに注意してください。これは、ケースを 1 つ省略しても、コンパイラはエラーを発生させないことを意味します。

関数型プログラミングにおける代数データ型

ML系統の関数型プログラミング言語(標準 ML (SML)、OCamlHaskellなど) では、nullary コンストラクターのみを持つ代数データ型を使用して、列挙型を実装できます。例 (SML 署名の構文):

datatype  cardsuit  = クラブ |  ダイヤモンド |  ハーツ |ハーツ  スペード
 カード =  { スーツ:カード スーツ;  value :  int  } 
val  hand  : カード リスト
val  trump  :  cardsuit

これらの言語では、実際にそのような表現が実装で採用されている場合、小さな整数表現はプログラマーから完全に隠されています。ただし、Haskell には、型と の間のマッピングを取得するために型が派生または実装できるEnum 型クラスIntがあります。

データベース

一部のデータベースは、列挙型を直接サポートしています。MySQLENUMは、テーブルの作成時に文字列として指定された許容値を持つ列挙型を提供します。値は数値インデックスとして格納され、空の文字列は 0 として格納され、最初の文字列値は 1 として格納され、2 番目の文字列値は 2 として格納されます。値は、数値インデックスまたは文字列値として格納および取得できます。[8]

例:

CREATE  TABLE シャツ ( 
    name  VARCHAR ( 40 ), 
    size  ENUM ( 'x-small' ,  'small' ,  'medium' ,  'large' ,  'x-large' ) 
);

XML スキーマ

XML スキーマは、文字列などのほとんどのプリミティブ データ型を制約するために使用される列挙ファセットを通じて、列挙型をサポートします。

<xs:element  name= "cardsuit" > 
  <xs:simpleType> 
    <xs:restriction  base= "xs:string" > 
      <xs:enumeration  value= "Clubs" /> 
      <xs:enumeration  value= "Diamonds" /> 
      < xs:enumeration  value= "Hearts" /> 
      <xs:enumeration  value= "Spades" /> 
    </xs:restriction> 
  </xs:simpleType> 
</xs:element>

も参照

参考文献

  1. ^ カーニハン、ブライアン W .; リッチー、デニス M. (1978 年 2 月)。C プログラミング言語(第 1 版)。イングルウッドクリフ、ニュージャージー州プレンティスホールISBN 0-13-110163-3.
  2. ^ オバサンジョ、あえて (2007). 「Microsoft の C# プログラミング言語と Sun Microsystems の Java プログラミング言語との比較」 . 2007 年にオリジナルからアーカイブ2012 年9 月 6 日閲覧Java では、列挙型は本格的なクラスです。つまり、型安全であり、メソッドやフィールドを追加したり、インターフェイスを実装したりすることで拡張できます。一方、C# では、列挙型は単に整数型 (通常は int) を囲む構文糖衣であり、拡張できず、型安全ではありません。
  3. ^ Gruntz、Dominik、Prof. Dr. (2005-04-08). 「Java 5: 虎を飼いならす: シンタクティック シュガー」 (ドイツ語)。Fachhochschule Aargau、Nordwestschweiz。2007-01-07のオリジナルからのアーカイブ2012 年9 月 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 Programmierspra​​chen wie C/C++ und C# cann man ihnen per Gleichheitszeichen keine ganzen Zahlen zuordnen. 代替 URL
  4. ^ Truter, Christoff (2011-08-04). 「シンタックス シュガー (C#): 列挙型」 . CSTrüter。2011 年 8 月 4 日にオリジナルからアーカイブされまし2012 年9 月 10 日閲覧// 貧弱に設計された列挙型はこれを行いません… 明らかに (他のすべての場合と同様に)、この砂糖のかけらを悪用して、システムが高血糖に苦しむ可能性があります。… 列挙型の基になる型が int であるため (他の整数型も使用できます)、列挙型をビット単位の演算子を介してビット フラグとして使用すると、いくつかの興味深い問題が発生する可能性があります。
  5. ^ 「効果的な囲碁」 . golang.org囲碁の著者2014 年5 月 13 日閲覧
  6. ^ "列挙型" . オラクル2013 年12 月 5 日閲覧
  7. ^ ブロック、ジョシュア(2008). 効果的な Java (第 2 版)。ニュージャージー州アッパー サドル リバー: アディソン ウェズリー。p。 158 . ISBN 978-0-321-35668-0.
  8. ^ "MySQL :: MySQL 8.0 リファレンス マニュアル :: 11.3.5 ENUM 型" . dev.mysql.com 2021年9月19日閲覧

外部リンク