Zig Academy · Aula

Estruturas de dados genéricas

Aprenda o padrão de uma função que retorna um tipo.

Aula 2 de 413 etapas

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. 🎯

Grátis para começar

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

  1. Funções que recebem um tipo
  2. Estruturas de dados genéricas
  3. @TypeOf e reflexão de tipos
  4. Parâmetros anytype
← Voltar para Zig Academy