En el lenguaje de programación Zig, los enums (abreviatura de “enumeraciones”) son una forma de definir un conjunto de valores nombrados que tienen un significado específico en el contexto de un programa. Los enums son especialmente útiles cuando se necesita representar un conjunto de opciones o estados que un programa puede tener. A continuación, se explicará cómo definir un enum en Zig y se proporcionarán ejemplos de código para ilustrar su uso.
Definición básica de un enum
En Zig, un enum se define utilizando la palabra clave enum
seguida del nombre del enum y una lista de valores que lo componen. Cada valor en la lista se asigna a un número entero que comienza desde cero y aumenta automáticamente a menos que se especifique explícitamente un valor para ese elemento.
Ejemplo de un enum simple
const std = @import("std"); pub fn main() !void { const Color = enum { Rojo, Verde, Azul, }; var mi_color: Color = .Rojo; std.debug.print("Mi color es: {s}\n", .{@tagName(mi_color)}); }
En este ejemplo, se define un enum llamado Color
con tres valores: Rojo
, Verde
y Azul
. Luego, se crea una variable mi_color
del tipo Color
y se asigna el valor Rojo
a ella. La función std.debug.print
se utiliza para imprimir el valor de mi_color
como una cadena, utilizando la función @tagName
para obtener el nombre del valor enum como una cadena.
Valor implícito y explícito de los elementos del enum
Cuando se define un enum, cada elemento se asigna a un valor entero que comienza desde cero y aumenta automáticamente. Sin embargo, también se puede asignar explícitamente un valor a cada elemento del enum. A continuación, se presentan algunas formas de hacerlo:
- Valores implícitos: Los valores se asignan automáticamente comenzando desde cero.
- Valores explícitos: Se especifica un valor para cada elemento del enum.
- Combinación de implícitos y explícitos: Pueden combinarse valores implícitos y explícitos en un mismo enum.
const std = @import("std"); pub fn main() !void { // Valores implícitos const DiasSemana = enum { Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo, }; // Valores explícitos const Meses = enum { Enero = 1, Febrero = 2, Marzo = 3, Abril = 4, Mayo = 5, Junio = 6, Julio = 7, Agosto = 8, Septiembre = 9, Octubre = 10, Noviembre = 11, Diciembre = 12, }; // Combinación de implícitos y explícitos const Estado = enum { Pendiente, En_Proceso = 5, Completado, Cancelado, }; var dia: DiasSemana = .Lunes; var mes: Meses = .Enero; var estado: Estado = .Completado; std.debug.print("Día: {d}\n", .{@enumToInt(dia)}); std.debug.print("Mes: {d}\n", .{@enumToInt(mes)}); std.debug.print("Estado: {d}\n", .{@enumToInt(estado)}); }
En este ejemplo, se definen tres enums diferentes para ilustrar cómo se pueden asignar valores implícitos y explícitos a los elementos del enum. Luego, se crean variables para cada uno de los enums y se imprimen sus valores utilizando la función @enumToInt
para obtener el valor entero correspondiente a cada elemento del enum.