¿Cómo se define un enum en Zig?

¿Cómo se define un enum en Zig?

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.

Comments

No comments yet. Why don’t you start the discussion?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *