Estructuras de datos genéricas
Un patrón de función que devuelve un tipo.
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. 🎯
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
- Funciones que reciben un tipo
- Estructuras de datos genéricas
- @TypeOf y reflexión de tipos
- Parámetros anytype