Uniões marcadas e switch
Faça correspondência de padrões sobre as variantes da união.
Uniões marcadas e switch é uma aula grátis de Zig Academy no CoddyKit. Esta é a aula 3 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.
Partes desta aula ainda não foram traduzidas e aparecem em inglês.
Remembering the Variant
A plain union forgets which field is active. A tagged union pairs the value with an enum tag that records the current variant.
Declaring a Tagged Union
You write union(enum) to let Zig generate a matching tag automatically, one tag name per field.
const Value = union(enum) { int: i64, text: []const u8 };The Tag Tracks the Field
Now the value carries its own tag, like .int or .text. The union always knows which variant it currently holds.
var v = Value{ .int = 7 };Switch over the Variants
Use switch on a tagged union to branch by variant. Each case names one tag and handles that shape of the value.
switch (v) { .int => {}, .text => {} }Capture the Payload
Add a capture with vertical bars to pull out the inner value of the active field, ready to use inside that branch.
switch (v) { .int => |n| useInt(n), .text => |s| useText(s) }Exhaustiveness Is Enforced
Zig requires every variant to be handled. Forget a case and the compiler stops you, so you never silently miss one.
The else Branch
When you want to handle the rest in one place, add an else branch to cover any variants you did not list explicitly.
switch (v) { .int => |n| useInt(n), else => {} }switch Is an Expression
A switch can produce a value, so each branch returns something. You assign the whole switch to a variable in one step.
const kind = switch (v) { .int => 1, .text => 2 };Mutate Through a Capture
Capture by pointer with |*field| when you want to change the payload in place rather than copy it out of the union.
switch (v) { .int => |*n| n.* += 1, else => {} }A Type-Safe Sum Type
Tagged unions are Zig's safe sum types: one value, many shapes, and a switch that the compiler proves you handled completely.
Perfect for Parsers and States
This pattern fits tokens, AST nodes, and state machines beautifully: model each case once and let switch route the logic.
Quick Check
What does writing union(enum) give you over a plain union?
Recap
You met tagged unions: union(enum) tracks the active variant. Switch over it, capture payloads with bars, and the compiler enforces every case. 🧩
Perguntas Frequentes
A aula “Uniões marcadas e switch” é grátis?
Sim — o texto completo de “Uniões marcadas e switch” é 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 “Uniões marcadas e switch”?
Faça correspondência de padrões sobre as variantes da união. 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 3 de 4.
Quanto tempo leva a aula “Uniões marcadas e switch”?
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
- Enumerações para um conjunto fixo de valores
- Uniões que armazenam um entre vários tipos
- Uniões marcadas e switch
- Métodos de enumeração e inteiros subjacentes