Dartのenumについての小ネタです。
IDやエラーコードの管理などで、連番ではないenumを作成したい場合がありますが、Dartでは以下のように実装できます。(enhanced enum)
Dart
enum TestEnum {
zero(0),
two(2),
four(4),
six(6);
const TestEnum(this.value);
final int value;
}このような場合enumから値(int)への変換と、その逆変換(int→enum)ができると便利です。
いくつか方法はあると思いますが、以下のようにするのがシンプルで良さそうに思います。
Dart
enum TestEnum {
zero(0),
two(2),
four(4),
six(6);
const TestEnum(this.value);
final int value;
static TestEnum fromInt(int v) {
return TestEnum.values.firstWhere(
(e) => e.value == v,
orElse: () => TestEnum.zero, // 見つからない場合
);
}
}
void main() {
print(TestEnum.two.index); // 1(0始まりのインデックスで取得)
print(TestEnum.two.value); // 2(値を取得)
print(TestEnum.fromInt(4)); // TestEnum.four
print(TestEnum.fromInt(8)); // TestEnum.zero(範囲外)
}

コメント