列挙型
列挙型(しばしば列挙またはenumと呼ばれる)は、一定数の定数値を表すために使用される特殊な種類のクラスです。
単純な列挙型の宣言
#単純な列挙型を宣言するには、enum
キーワードを使用して、列挙する値をリストします。
enum Color { red, green, blue }
拡張列挙型の宣言
#Dartでは、列挙型の宣言で、フィールド、メソッド、および一定数の既知の定数インスタンスに制限されたconstコンストラクタを持つクラスを宣言することもできます。
拡張列挙型を宣言するには、通常のクラスと同様の構文を使用しますが、いくつかの追加の要件があります。
- インスタンス変数は、mixinによって追加されたものも含めて、
final
でなければなりません。 - すべての生成コンストラクタは定数でなければなりません。
- ファクトリコンストラクタは、一定数の既知の列挙型インスタンスのいずれかしか返すことができません。
Enum
は自動的に拡張されるため、他のクラスを拡張することはできません。index
、hashCode
、等値演算子==
をオーバーライドすることはできません。- 自動生成される静的
values
ゲッターと競合するため、values
という名前のメンバーを列挙型で宣言することはできません。 - 列挙型のすべてのインスタンスは宣言の先頭に宣言する必要があり、少なくとも1つのインスタンスを宣言する必要があります。
拡張列挙型のインスタンスメソッドでは、this
を使用して現在の列挙型値を参照できます。
複数のインスタンス、インスタンス変数、ゲッター、および実装されたインターフェースを持つ拡張列挙型を宣言する例を以下に示します。
enum Vehicle implements Comparable<Vehicle> {
car(tires: 4, passengers: 5, carbonPerKilometer: 400),
bus(tires: 6, passengers: 50, carbonPerKilometer: 800),
bicycle(tires: 2, passengers: 1, carbonPerKilometer: 0);
const Vehicle({
required this.tires,
required this.passengers,
required this.carbonPerKilometer,
});
final int tires;
final int passengers;
final int carbonPerKilometer;
int get carbonFootprint => (carbonPerKilometer / passengers).round();
bool get isTwoWheeled => this == Vehicle.bicycle;
@override
int compareTo(Vehicle other) => carbonFootprint - other.carbonFootprint;
}
列挙型の使い方
#列挙値には、他の静的変数と同様にアクセスします。
final favoriteColor = Color.blue;
if (favoriteColor == Color.blue) {
print('Your favorite color is blue!');
}
列挙型の各値にはindex
ゲッターがあり、列挙型宣言における値の0ベースの位置を返します。たとえば、最初の値のインデックスは0、2番目の値のインデックスは1です。
assert(Color.red.index == 0);
assert(Color.green.index == 1);
assert(Color.blue.index == 2);
すべての列挙値のリストを取得するには、列挙型のvalues
定数を使用します。
List<Color> colors = Color.values;
assert(colors[2] == Color.blue);
switch文で列挙型を使用でき、すべての列挙値を処理していない場合は警告が表示されます。
var aColor = Color.blue;
switch (aColor) {
case Color.red:
print('Red as roses!');
case Color.green:
print('Green as grass!');
default: // Without this, you see a WARNING.
print(aColor); // 'Color.blue'
}
Color.blue
から'blue'
など、列挙値の名前へのアクセスが必要な場合は、.name
プロパティを使用します。
print(Color.blue.name); // 'blue'
通常のオブジェクトと同様に、列挙値のメンバーにアクセスできます。
print(Vehicle.car.carbonFootprint);
特に明記されていない限り、このサイトのドキュメントはDart 3.5.3を反映しています。ページの最終更新日:2024年2月7日。ソースコードを表示 または 問題を報告する。