Os tipos enumerados, tamén coñecidos como enumeracións ou enums
, son un tipo especial de clase utilizado para representar un número fixo ou pechado de valores constantes. Son ideais cando unha variable só pode tomar un número limitado de opcións coñecidas, como días da semana, cores, estados, etc.
En Dart, todos os enums
estenden automaticamente a clase Enum
.
🔸 Declaración de Enums Simples #
Para declarar un tipo enumerado simple, utilízase a palabra clave enum
seguida dunha lista dos valores que desexas enumerar.
Cada valor dun enum
ten:
.index
: a súa posición na declaración (comeza en 0)..name
: o nome literal do valor como cadea.
A propia enumeración tamén inclúe:
values
: unha lista con todos os valores definidos na enum, en orde.
// Exemplo de enum para os días da semana
enum DiaSemana {
luns,
martes,
mércores,
xoves,
venres,
sábado,
domingo
}
// Exemplo de enum para as cores básicas
enum Cor {
vermello,
verde,
azul,
amarelo
}
void main() {
// Selección de valores individuais das enums
var hoxe = DiaSemana.mércores;
var corFavorita = Cor.azul;
print('Hoxe é $hoxe.'); // Saída: Hoxe é DiaSemana.mércores
print('A miña cor favorita é $corFavorita.'); // Saída: A miña cor favorita é Cor.azul
// --- Propiedade .index ---
// Indica a posición do valor na declaración da enum (comeza en 0)
print('Luns está no índice: ${DiaSemana.luns.index}'); // Saída: 0
print('Amarelo está no índice: ${Cor.amarelo.index}'); // Saída: 3
// --- Propiedade .name ---
// Obtén o nome literal do valor como String (sen prefixo do enum)
print('Nome literal de $hoxe: ${hoxe.name}'); // Saída: mércores
print('Nome literal da cor favorita: ${corFavorita.name}');// Saída: azul
// --- Propiedade estática .values ---
// Obtemos a lista completa de valores do enum
print('Todos os días da semana:');
for (var dia in DiaSemana.values) {
print(' - ${dia.name} (índice: ${dia.index})');
}
print('Todas as cores dispoñibles:');
for (var cor in Cor.values) {
print(' - ${cor.name}');
}
}
🔹 Listar todos os valores dun enum #
Podes obter todos os valores dunha enumeración usando a propiedade values
.
void main() {
List<Cor> cores = Cor.values;
for (var cor in cores) {
print(cor); // Cor.vermelho, Cor.verde, Cor.azul
}
}
🔹 Usar enums en switch
#
As enumeracións funcionan moi ben con estruturas switch
.
enum Estado { cargando, correcto, erro }
void mostrarEstado(Estado estado) {
switch (estado) {
case Estado.cargando:
print('Cargando datos...');
break;
case Estado.correcto:
print('Todo correcto!');
break;
case Estado.erro:
print('Produciuse un erro.');
break;
}
}
🔹 Enums avanzadas (enhanced enums) #
A partir de Dart 2.17, é posible crear enums máis completas con atributos, métodos e construtores.
enum Vehiculo {
coche(rodas: 4, pasaxeiros: 5),
bicicleta(rodas: 2, pasaxeiros: 1),
bus(rodas: 6, pasaxeiros: 50);
const Vehiculo({required this.rodas, required this.pasaxeiros});
final int rodas;
final int pasaxeiros;
bool get éIndividual => pasaxeiros == 1;
}
void main() {
var v = Vehiculo.bicicleta;
print('Ten ${v.rodas} rodas e ${v.pasaxeiros} pasaxeiros.');
print('É individual? ${v.éIndividual ? "Si" : "Non"}');
}
🔗 Para saber máis: #
Nestes apuntamentos limítome a explicar o uso básico dos enum
. Porén, Dart ofrece moitas máis posibilidades e características avanzadas para traballar con eles, sobre todo no último apartado de enums avanzados.
Se queres afondar máis no tema, podes consultar: