Estruturas de dados genéricas
Aprenda o padrão de uma função que retorna um tipo.
Estruturas de dados genéricas é uma aula grátis de Zig Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Zig Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Zig Academy inclui 4 aulas no total.
Contêineres genéricos em Zig
Para fazer uma estrutura de dados funcionar com qualquer tipo de elemento, escreva uma função que receba um tipo e retorne um tipo struct completamente novo. 📦
Uma função que retorna um tipo
O segredo é que uma função pode ter type como tipo de retorno. Ela calcula e devolve um tipo novo em tempo de compilação.
fn List(comptime T: type) type {
return struct {};
}Construir a struct internamente
Dentro da função, defina uma struct cujos campos usem o parâmetro de tipo T. Cada chamada produz uma struct personalizada para esse tipo de elemento.
fn Box(comptime T: type) type {
return struct { value: T };
}Nomear o tipo resultante
Chame a função que retorna o tipo e armazene o resultado em uma const. Agora você tem um tipo concreto pronto para usar.
const IntBox = Box(i32);Criar uma instância
Use esse tipo nomeado como usaria qualquer struct. Aqui, criamos uma Box que armazena o inteiro quarenta e dois.
const b = IntBox{ .value = 42 };Adicionar métodos à struct interna
A struct retornada também pode conter métodos. Eles veem o parâmetro de tipo, portanto continuam totalmente genéricos.
fn Box(comptime T: type) type {
return struct {
value: T,
fn get(self: @This()) T {
return self.value;
}
};
}Acessar o tipo com @This
Dentro de uma struct anônima retornada, você não pode nomeá-la diretamente, então os métodos usam @This() para se referir ao tipo da struct envolvente.
self: @This()Muitos tipos a partir de uma definição
Chame a função com tipos diferentes e obtenha structs distintas. Box(i32) e Box(f64) são tipos separados e totalmente verificados.
const FloatBox = Box(f64);Isso sustenta a biblioteca padrão
As próprias ArrayList e HashMap do Zig são construídas exatamente assim: funções que recebem um tipo e retornam um tipo de contêiner configurado.
const Ints = std.ArrayList(i32);Resolvido inteiramente em tempo de compilação
Toda essa construção de tipos acontece durante a compilação, portanto um contêiner genérico tem o mesmo custo que um escrito manualmente.
Transportar um alocador ao crescer
Contêineres que crescem armazenam um campo allocator, passado na inicialização, para que o tipo genérico deixe explícita a origem de sua memória.
return struct {
items: []T,
alloc: std.mem.Allocator,
};Verificação rápida
Você quer uma pilha genérica que funcione com qualquer tipo de elemento em Zig. Qual padrão deve usar?
Recapitulação
Escreva uma função que receba um type e retorne um tipo struct. Cada chamada produz um contêiner concreto e especializado. É assim que std constrói suas coleções. 🎯
Aprenda Zig com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 30
- Aulas
- 120
Perguntas Frequentes
A aula “Estruturas de dados genéricas” é grátis?
Sim — o texto completo de “Estruturas de dados genéricas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Zig Academy, atualize para CoddyKit PRO. O curso de Zig Academy inclui 4 aulas no total.
O que vou aprender em “Estruturas de dados genéricas”?
Aprenda o padrão de uma função que retorna um tipo. Você pratica Zig Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Zig Academy?
Nenhuma experiência prévia é necessária. Zig Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Estruturas de dados genéricas”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Zig Academy?
Sim. Cada aula de Zig Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Funções que recebem um tipo
- Estruturas de dados genéricas
- @TypeOf e reflexão de tipos
- Parâmetros anytype