PR

Dartで連番でないenumとintを相互変換する方法

Dart enhanced enum tips ソフトウェア

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(範囲外)
}

コメント

タイトルとURLをコピーしました