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
indexca să reții alegerea. Dacă adaugi o valoare la începutul enum-ului, toate datele salvate își schimbă sensul. Salveazănameși citește cuvalues.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.