Uma pilha genérica do zero
LIFO parametrizada por tipo sobre um alocador.
Uma pilha genérica do zero é uma aula grátis de Zig Academy no CoddyKit. Esta é a aula 1 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.
O que uma pilha faz
Uma pilha é uma coleção LIFO: o último item que você adiciona com push é o primeiro que remove com pop. Pense em pratos empilhados sobre um balcão. 🍽️
Torne-a genérica
Para aceitar qualquer tipo de elemento, escreva uma função que receba um tipo e retorne um tipo struct. Cada chamada fornece uma pilha adaptada àquele tipo.
fn Stack(comptime T: type) type {
return struct {};
}Armazene itens e um alocador
Internamente, a struct mantém uma fatia expansível de itens e o alocador do qual obtém memória. O Zig nunca oculta a alocação.
return struct {
items: []T,
len: usize,
alloc: std.mem.Allocator,
};Consulte a struct com @This
A struct retornada é anônima, então os métodos nomeiam seu próprio tipo com @This(). Isso mantém cada método totalmente genérico.
const Self = @This();Inicialize uma pilha vazia
Uma função init recebe o alocador e retorna uma pilha nova e vazia. Nada é alocado até você usar push.
fn init(a: std.mem.Allocator) Self {
return .{ .items = &.{}, .len = 0, .alloc = a };
}Push pode falhar
Aumentar o buffer pode exigir memória, então push retorna uma união de erro. Os chamadores tratam explicitamente o caso de falta de memória.
fn push(self: *Self, value: T) !void {
// grow then store
}Reutilize realloc para aumentar
Para criar espaço, peça ao alocador para fazer realloc da fatia para um tamanho maior. O novo comprimento depende da sua política de crescimento.
self.items = try self.alloc.realloc(self.items, self.len + 1);
self.items[self.len] = value;
self.len += 1;Remova o valor do topo
pop retorna um opcional: o item do topo se houver um, ou null quando a pilha estiver vazia. Não há falhas em uma pilha vazia.
fn pop(self: *Self) ?T {
if (self.len == 0) return null;
self.len -= 1;
return self.items[self.len];
}Libere o que você alocou
Como o buffer pertence a você, é necessário devolvê-lo. Um método deinit libera a fatia usando o mesmo alocador.
fn deinit(self: *Self) void {
self.alloc.free(self.items);
}Use-a
Crie um tipo concreto chamando a função e, depois, inicialize-o. Stack(i32) é um tipo real e totalmente verificado, pronto para receber inteiros.
var s = Stack(i32).init(allocator);
defer s.deinit();
try s.push(42);Uma definição, muitas pilhas
Chame a função com tipos diferentes, e cada chamada será uma pilha separada e especializada. Stack(u8) e Stack(f64) não compartilham código acidentalmente.
Verificação rápida
Sua pilha genérica precisa de memória de heap para crescer. De onde vem essa memória?
Recapitulação
Uma pilha genérica é uma função que retorna um tipo e contém itens e um alocador. push aumenta a pilha, pop retorna um opcional e deinit libera a memória. 🎯
Perguntas Frequentes
A aula “Uma pilha genérica do zero” é grátis?
Sim — o texto completo de “Uma pilha genérica do zero” é 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 “Uma pilha genérica do zero”?
LIFO parametrizada por tipo sobre um alocador. 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 1 de 4.
Quanto tempo leva a aula “Uma pilha genérica do zero”?
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
- Uma pilha genérica do zero
- Uma lista simplesmente encadeada
- Usando HashMap e AutoHashMap
- Perfil de desempenho e compromissos de segurança