Zig Academy · Lección

Estructuras de datos genéricas

Un patrón de función que devuelve un tipo.

Lección 2 de 413 pasos

Estructuras de datos genéricas es una lección gratuita de Zig Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Zig Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Zig Academy incluye 4 lecciones en total.

Contenedores genéricos en Zig

Para hacer que una estructura de datos funcione con cualquier tipo de elemento, escriba una función que acepte un tipo y devuelva un tipo struct completamente nuevo. 📦

Una función que devuelve un tipo

El truco consiste en que una función puede tener type como tipo de retorno. Calcula y devuelve un tipo nuevo en tiempo de compilación.

fn List(comptime T: type) type {
    return struct {};
}

Construya el struct dentro

Dentro de la función, defina un struct cuyos campos utilicen el parámetro de tipo T. Cada llamada produce un struct adaptado a ese tipo de elemento.

fn Box(comptime T: type) type {
    return struct { value: T };
}

Asigne un nombre al tipo resultante

Llame a la función que devuelve el tipo y guarde el resultado en un const. Ahora tiene un tipo concreto listo para usar.

const IntBox = Box(i32);

Cree una instancia

Utilice ese tipo con nombre igual que cualquier struct. Aquí creamos un Box que contiene el entero cuarenta y dos.

const b = IntBox{ .value = 42 };

Añada métodos al struct interno

El struct devuelto también puede contener métodos. Estos ven el parámetro de tipo, por lo que siguen siendo completamente genéricos.

fn Box(comptime T: type) type {
    return struct {
        value: T,
        fn get(self: @This()) T {
            return self.value;
        }
    };
}

Acceda al tipo con @This

Dentro de un struct anónimo devuelto no puede asignarle un nombre directamente, por lo que los métodos utilizan @This() para referirse al tipo del struct envolvente.

self: @This()

Muchos tipos a partir de una definición

Llame a la función con distintos tipos y obtendrá structs distintos. Box(i32) y Box(f64) son tipos independientes y completamente comprobados.

const FloatBox = Box(f64);

Esto impulsa la biblioteca estándar

El propio ArrayList de Zig y HashMap se construyen exactamente de esta manera: funciones que aceptan un tipo y devuelven un tipo de contenedor configurado.

const Ints = std.ArrayList(i32);

Se resuelve por completo en tiempo de compilación

Toda esta construcción de tipos ocurre durante la compilación, por lo que un contenedor genérico tiene el mismo coste que uno escrito manualmente.

Conserve un Allocator al crecer

Los contenedores que crecen almacenan un campo allocator, que se pasa al inicializarlos, de modo que el tipo genérico deja explícito de dónde procede su memoria.

return struct {
    items: []T,
    alloc: std.mem.Allocator,
};

Comprobación rápida

Quiere una pila genérica que funcione con cualquier tipo de elemento en Zig. ¿Qué patrón utiliza?

Resumen

Escriba una función que acepte un type y devuelva un tipo struct. Cada llamada produce un contenedor concreto y especializado. Así es como std construye sus colecciones. 🎯

Gratis para empezar

Aprende Zig con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
30
Lecciones
120

Preguntas frecuentes

¿La lección «Estructuras de datos genéricas» es gratis?

Sí — el texto completo de «Estructuras de datos genéricas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Zig Academy, actualiza a CoddyKit PRO. El curso de Zig Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Estructuras de datos genéricas»?

Un patrón de función que devuelve un tipo. Practicas Zig Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Zig Academy?

No se requiere experiencia previa. Zig Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Estructuras de datos genéricas»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Zig Academy?

Sí. Cada lección de Zig Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Funciones que reciben un tipo
  2. Estructuras de datos genéricas
  3. @TypeOf y reflexión de tipos
  4. Parámetros anytype
← Volver a Zig Academy