Zig Academy · Lektion

@TypeOf och typreflektion

Inspektera typer för att förbli generisk

Lektion 3 av 413 steg

@TypeOf och typreflektion är en gratis lektion i Zig Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Zig Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Zig Academy innehåller totalt 4 lektioner.

Fråga om typer

Generisk kod behöver ofta känna till typen för ett värde utan att du skriver ut den. Zig löser detta med den inbyggda funktionen @TypeOf. 🔍

@TypeOf returnerar en typ

Ge @TypeOf ett eller flera uttryck så returnerar den deras typ, helt beräknad vid kompileringen.

const T = @TypeOf(value);

Uttrycket körs inte

Argumentet till @TypeOf inspekteras bara och körs aldrig. Även ett funktionsanrop inuti det undersöks, men körs inte i praktiken.

Fånga typen för en parameter

Inuti en generisk funktion kan du namnge typen för vilket argument som helst och återanvända den, till exempel för att deklarera en matchande local variabel.

fn echo(x: anytype) void {
    const T = @TypeOf(x);
    _ = T;
}

Hämta ett läsbart namn

Den inbyggda funktionen @typeName omvandlar en typ till en läsbar sträng, vilket är praktiskt vid felsökningsutskrifter eller felmeddelanden.

const name = @typeName(i32);

Djupare reflektion med @typeInfo

För fullständig information returnerar @typeInfo en taggad union som beskriver typen: om den är ett heltal, en struct, en pekare och mycket mer.

const info = @typeInfo(i32);

Välj gren utifrån typens sort

Eftersom resultatet är en tagged union kan du använda switch på det för att hantera heltal, flyttal och structar på olika sätt i en och samma generiska funktion.

switch (@typeInfo(T)) {
    .int => {},
    else => {},
}

Läs ett heltals bitbredd

När en typ är ett heltal innehåller dess information fält som bits och teckenstatus, så att du kan anpassa logiken efter den exakta bredden.

const bits = @typeInfo(u16).int.bits;

Reflektion håller koden generisk

Genom att inspektera typer i stället för att hårdkoda dem kan en funktion fungera korrekt för många indatatyper. Det är kärnan i Zigs reflection. ✨

Allt sker vid kompileringen

Alla inbyggda reflektionsfunktioner körs under bygget, så denna introspektion tillför ingen run-time-omkostnad till det färdiga programmet.

Lista en structs fält

För en struct exponerar @typeInfo en fältarray som du kan loopa över vid kompileringen för att läsa varje fälts namn och typ.

const fields = @typeInfo(Point).@"struct".fields;

Snabbkontroll

Inuti en generisk funktion har du ett värde x och vill veta dess typ. Vilken inbyggd funktion ger dig den?

Sammanfattning

Använd @TypeOf för att ta reda på ett värdes typ och @typeInfo för att undersöka dess struktur. Genom att använda switch på denna information kan en funktion anpassa sig till många typer. 🎯

Gratis att börja

Lär dig Zig med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”@TypeOf och typreflektion” gratis?

Ja – hela texten till ”@TypeOf och typreflektion” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Zig Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Zig Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”@TypeOf och typreflektion”?

Inspektera typer för att förbli generisk Ni övar på Zig Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Zig Academy?

Du behöver inga förkunskaper. Utbildningen i Zig Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”@TypeOf och typreflektion”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Zig Academy-lektionen?

Ja. Varje Zig Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Funktioner som tar en typ
  2. Generiska datastrukturer
  3. @TypeOf och typreflektion
  4. anytype-parametrar
← Tillbaka till Zig Academy