Zig Academy · leksjon

Funksjoner som tar en type

Generiske funksjoner via comptime T-parametere.

Leksjon 1 av 413 trinn

Funksjoner som tar en type er en gratis leksjon i Zig Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Zig Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Zig Academy inneholder totalt 4 leksjoner.

Generiske funksjoner på Zig-måten

Zig har ingen egen syntaks for generiske funksjoner. I stedet kan en funksjon ta imot en type som én av parameterne sine og bruke den som enhver annen verdi. ✨

En typeparameter er comptime

Fordi en type må være kjent når koden bygges, er typeparameteren alltid merket comptime. Kalleren sender inn en faktisk type.

fn first(comptime T: type, items: []const T) T {
    return items[0];
}

type er en ekte type

I Zig er ordet type selv en type, så en parameter kan deklareres som type for å bety hvilken som helst type.

comptime T: type

Bruk T i signaturen

Når du har gitt typen navnet T, kan du bruke den for senere parametere og returtypen, slik at de knyttes sammen.

fn max(comptime T: type, a: T, b: T) T {
    return if (a > b) a else b;
}

Kall en generisk funksjon

For å kalle den sender du først den konkrete typen og deretter de vanlige argumentene. Her ber vi om den største av to i32-verdier.

const m = max(i32, 3, 9);

Én funksjon, mange typer

Den samme funksjonen fungerer for alle typer som støtter operasjonene du bruker. Bytt ut i32 med f64, så fungerer koden fortsatt.

const f = max(f64, 1.5, 2.5);

Zig spesialiserer hvert kall

For hver unike type du sender inn, genererer Zig en egen kopi av funksjonen. Dette kalles monomorfisering og gjøres ved kompilering.

Kroppen forblir generisk

Du skriver typen uttrykkelig ved kallet, men kroppen forblir generisk. Zig kontrollerer at operasjonene du bruker, er gyldige for den T som mottas.

type betyr ingen skjult innpakking

Å sende inn en faktisk type er forskjellig fra polymorfisme ved kjøring: Det finnes ingen vtable og ingen innpakking, bare en konkret kopi som velges ved bygging.

Feil oppdages ved kompilering

Hvis du kaller max med en type som ikke har en større enn-operator, rapporterer Zig problemet når den bygger denne spesialiseringen, ikke under kjøring.

Typeparametere kommer først

Etter konvensjonen listes comptime-typeparameteren før verdieparameterne, slik at typen er kjent før dataene beskrives.

fn clone(comptime T: type, value: T) T {
    return value;
}

Sjekk deg selv

Du vil ha en funksjon som fungerer for mange typer i Zig. Hvordan deklarerer du typeparameteren?

Oppsummering

Send inn en comptime T: type-parameter for å gjøre en funksjon generisk. Zig bygger en spesialisert versjon for hver type du faktisk bruker. 🎯

Gratis å komme i gang

Lær deg Zig med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
30
Leksjoner
120

Ofte stilte spørsmål

Er leksjonen «Funksjoner som tar en type» gratis?

Ja – hele teksten i «Funksjoner som tar en type» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Zig Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Zig Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Funksjoner som tar en type»?

Generiske funksjoner via comptime T-parametere. Du øver på Zig Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Zig Academy?

Ingen tidligere erfaring er nødvendig. Zig Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Funksjoner som tar en type»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Zig Academy-leksjonen?

Ja. Alle Zig Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Funksjoner som tar en type
  2. Generiske datastrukturer
  3. @TypeOf og typerefleksjon
  4. anytype-parametere
← Tilbake til Zig Academy