Diccionario

Enumeración (enum)

Un tipo de dato cuyo valor solo puede ser uno de una lista cerrada de opciones, como los días de la semana o los estados de un pedido.

Un enum define de antemano todas las opciones posibles: Pendiente, Enviado, Entregado. Así no puede colarse un valor mal escrito como un texto suelto.

En Rust, Swift o Kotlin cada variante puede llevar datos propios, y combinadas con match o when el compilador comprueba que tratas todos los casos.

Un ejemplo

enum EstadoPedido { Pendiente, Enviado, Entregado } impide guardar un estado inexistente como «Enviadoo».

Por qué importa

Una enumeración define un conjunto cerrado de valores posibles con nombre: los días de la semana, los estados de un pedido (pendiente, enviado, entregado) o las direcciones (norte, sur, este, oeste). Sin ella, mucha gente usaría números mágicos como 0, 1 y 2, o cadenas de texto, y un error tipográfico como «enviadoo» pasaría desapercibido hasta ejecutar. Con una enumeración, el compilador solo acepta los valores permitidos.

La encuentras en casi todos los lenguajes tipados (Java, C#, C, C++, Rust, TypeScript, Swift). En Rust y Swift son especialmente potentes porque cada variante puede llevar datos asociados, lo que las convierte en una forma muy expresiva de modelar situaciones distintas. Combinadas con la coincidencia de patrones, permiten manejar todos los casos y que el compilador avise si olvidas alguno.

Confusiones frecuentes

Es fácil confundir las enumeraciones simples de C con las de Rust o Swift. En C, un enum es en esencia un conjunto de constantes enteras y el compilador no te impide asignar cualquier número. En Rust o Swift, una enum es un tipo real y cada variante puede contener datos distintos, por ejemplo Pago::Tarjeta(numero) frente a Pago::Efectivo. Otro error común es comparar una enumeración con su texto en lugar de con su variante, perdiendo la comprobación que justamente ofrece el lenguaje.

Preguntas frecuentes

¿Qué ventaja tiene sobre usar constantes sueltas?

Las agrupa bajo un tipo propio, de modo que una función puede exigir un valor de ese tipo y el compilador rechaza valores fuera del conjunto. Además, el editor te autocompleta las opciones.

¿Una enumeración puede tener valores numéricos?

Sí, en muchos lenguajes cada variante tiene un número asociado, por defecto empezando en 0. En C# y C puedes asignarlos explícitamente, por ejemplo Rojo = 1.