Funções que recebem um tipo
Use parâmetros T comptime para criar genéricos.
Funções que recebem um tipo é 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.
Genéricos à maneira do Zig
O Zig não tem uma sintaxe separada para genéricos. Em vez disso, uma função pode aceitar um tipo como um de seus parâmetros e usá-lo como qualquer outro valor. ✨
Um parâmetro de tipo é comptime
Como um tipo precisa ser conhecido quando o código é construído, o parâmetro de tipo é sempre marcado como comptime. Quem chama a função passa um tipo real.
fn first(comptime T: type, items: []const T) T {
return items[0];
}type é um tipo real
Em Zig, a palavra type é ela própria um tipo, portanto um parâmetro pode ser declarado como type para significar qualquer tipo.
comptime T: typeUsar T na assinatura
Depois de nomear o tipo como T, você pode usá-lo nos parâmetros seguintes e no tipo de retorno, vinculando todos eles.
fn max(comptime T: type, a: T, b: T) T {
return if (a > b) a else b;
}Chamar uma função genérica
Para chamá-la, passe primeiro o tipo concreto e depois os argumentos comuns. Aqui, pedimos o maior de dois valores i32.
const m = max(i32, 3, 9);Uma função, muitos tipos
A mesma função funciona para qualquer tipo que ofereça suporte às operações usadas. Troque i32 por f64 e o código continuará adequado.
const f = max(f64, 1.5, 2.5);O Zig especializa cada chamada
Para cada tipo distinto que você passa, o Zig gera uma cópia dedicada da função. Isso é a monomorfização, realizada em tempo de compilação.
O corpo continua genérico
Você escreve o tipo explicitamente na chamada, mas o corpo continua genérico. O Zig verifica se as operações usadas são válidas para qualquer T recebido.
type não implica boxing oculto
Passar um type real é diferente de polimorfismo em tempo de execução: não há vtable nem boxing, apenas uma cópia concreta escolhida no momento da construção.
Os erros aparecem em tempo de compilação
Se você chamar max com um tipo que não tenha um operador de maior que, o Zig informará o problema ao construir essa especialização, não em tempo de execução.
Os parâmetros de tipo vêm primeiro
Por convenção, o parâmetro de tipo comptime vem antes dos parâmetros de valor, para que o tipo seja conhecido antes da descrição dos dados.
fn clone(comptime T: type, value: T) T {
return value;
}Verificação rápida
Você quer uma função que funcione com muitos tipos em Zig. Como declara o parâmetro de tipo?
Recapitulação
Passe um parâmetro comptime T: type para tornar uma função genérica. O Zig constrói uma versão especializada para cada tipo que você realmente usar. 🎯
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 “Funções que recebem um tipo” é grátis?
Sim — o texto completo de “Funções que recebem um tipo” é 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 “Funções que recebem um tipo”?
Use parâmetros T comptime para criar genéricos. 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 “Funções que recebem um tipo”?
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