Enum în Dart

Clasa de bază a tuturor tipurilor enum; index dă poziția valorii în declarație, începând de la 0.

Sintaxă
abstract interface class Enum
int get index

Ce face Enum

Orice tip declarat cu enum extinde automat clasa Enum. Așa toate valorile enum au proprietățile comune index și name, iar o funcție poate primi „orice enum” cu un parametru de tip Enum sau T extends Enum.

index este poziția valorii în declarație: prima are 0, a doua 1 etc. Lista tuturor valorilor este NumeEnum.values, deci NumeEnum.values[i] face drumul invers. Nu salva index în fișiere sau baze de date: dacă reordonezi valorile, indexurile se schimbă. Salvează name.

Ce returnează

index: un int.

Exemple

Exemplul 1: index și values

enum Anotimp { primavara, vara, toamna, iarna }

void main() {
  print(Anotimp.toamna.index);
  print(Anotimp.values);
  print(Anotimp.values[1]);
  var urmator = Anotimp.values[(Anotimp.iarna.index + 1) % Anotimp.values.length];
  print('După iarnă vine $urmator');
}

Rezultat

2
[Anotimp.primavara, Anotimp.vara, Anotimp.toamna, Anotimp.iarna]
Anotimp.vara
După iarnă vine Anotimp.primavara

Exemplul 2: O funcție pentru orice enum

enum Marime { s, m, l, xl }

enum Culoare { rosu, verde, albastru }

String optiuni(List<Enum> valori) => valori.map((v) => '${v.index + 1}) ${v.name}').join('  ');

void main() {
  print(optiuni(Marime.values));
  print(optiuni(Culoare.values));
}

Rezultat

1) s  2) m  3) l  4) xl
1) rosu  2) verde  3) albastru

Greșeli frecvente

  • Salvezi index ca să reții alegerea. Dacă adaugi o valoare la începutul enum-ului, toate datele salvate își schimbă sensul. Salvează name și citește cu values.byName.

Comenzi înrudite

  • enum: Un tip cu un număr fix de valori numite (zilele săptămânii, stările unei comenzi), eventual cu câmpuri și metode.
  • Enum.name: Numele valorii enum, ca text, exact cum este scris în declarație (fără numele tipului).
  • Enum.compareByName: Compară două valori enum după nume (alfabetic); compareByIndex le compară după ordinea din declarație.