【Flutter/Dart】列挙型(Enum)の使い方/基礎から実践

最終更新日

この記事では、Dartの基本文であるenumクラスについて調べてまとめました。基礎から実践までサンプルがあります。動かない場合はコメントください。

動かすにはDartpadを使用してください。

Enumとは

クラスを使う上でパット見分かりやすく、書きやすい美しいコードを書くための列挙型(Enum)です。

公式サイト

https://dart.dev/guides/language/language-tour#enumerated-types

使い方

下記のように、変数を宣言しその中に要素を格納していきます。その際、値と値を区切るときにはコンマ(,)で区切ります。

Enum 変数名={変数1,変数2,変数3,変数4,...
            }

注意

  • サブクラス化、実装、混合、またはその他の方法で明示的にインスタンス化することはできません。
  • 列挙型宣言によって実装または混合されない限り、オブジェクトはそのクラスまたはミックスインのタイプを実際に実装できません。
  • すべての要素がconst値になる場合に使用します。
  • 識別子の重複はエラーになります。
列挙名 変数名; //宣言
列挙名 変数名 = 列挙名.列挙子 //定義

//例
Direction direction;
Direction direction = Direction.left;

Directionは方向挙列型と呼ばれるものです。

https://api.flutter.dev/flutter/package-material_color_utilities_quantize_quantizer_wu/Direction.html

サンプルー識別子

enum Fruits{
  mango,
  apple,
  banana,
  grapes
}
void main(){

     for(Fruits name in Fruits.values)
    {
        print(name);
     }
}

解説

Fruitsに文字列を格納します。それらを使いクラス<Fruits>からfor文を使いvalues(値)をnameに移し変え出力しています。

識別子の重複

こちらのサンプルは識別子の重複があるためエラーが起きます。

enum Fruits{
  mango,
  apple,
  apple,
  banana,
  grapes
}
void main(){

     for(Fruits name in Fruits.values)
    {
        print(name);
     }
}

サンプルー一つの要素にアクセス

enum Fruits{
  mango,
  apple,
  banana,
  grapes
}
void main(){
        print(Fruits.values[0]);
}

サンプルーswitch

enum Fruits {
  apple,
  mango,
  banana,
  grapes
}
 
void main() { 
   
  // Assign a value from
  // enum to a variable geek
  // assume you app user will select from Menu Item Fruits
  var selectedEnumFruit = Fruits.Banana;
   
  // Switch-case
  switch(selectedEnumFruit) {
    case Fruits.apple: print("You selected Apple");
    break;
    case Fruits.mango: print("You selected mango");
    break;
    case Fruits.banana: print("You selected Banana");
    break;
    case Fruits.grapes: print("You selected Grapes");
    break;
  }
}

解説

selectedEnumFruitにFruits.Bananaを格納。switchでselectedEnumFruitを比較し「You selected Banana」が出力されました。

注意

挙列型のswitch文には通常の文字列データに”“があるため、引用符なしで文字列値を格納します。

他の配列型との違い

Dartには配列型が複数個ありますが、それぞれ役割は違います。Enumは他の配列型と違いは、データの扱い方やアクセス方法が異なるためListやSetと違いvalues(値)または[数値](識別子)を必要とすることです。

参考

https://protocoderspoint.com/dart-enum-how-to-use-enumeration-in-dart/

https://flutternyumon.com/how-to-use-enum/

fem