0Pricing
Zig Academy · Aula

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

  1. Uma pilha genérica do zero
  2. Uma lista simplesmente encadeada
  3. Usando HashMap e AutoHashMap
  4. Perfil de desempenho e compromissos de segurança
← Voltar para Zig Academy