Strutture dati generiche
Applicare il pattern di una funzione che restituisce un tipo
Strutture dati generiche è una lezione Zig Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Zig Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Zig Academy include 4 lezioni in totale.
Contenitori generici in Zig
Per fare in modo che una struttura dati funzioni con qualsiasi tipo di elemento, si scrive una funzione che accetta un tipo e restituisce un tipo struct completamente nuovo. 📦
Una funzione che restituisce un tipo
Il punto fondamentale è che una funzione può avere type come tipo restituito. Calcola e restituisce un nuovo tipo in fase di compilazione.
fn List(comptime T: type) type {
return struct {};
}Costruire la struct all'interno
All'interno della funzione, definisca una struct i cui campi usano il parametro di tipo T. Ogni chiamata produce una struct adattata a quel tipo di elemento.
fn Box(comptime T: type) type {
return struct { value: T };
}Dare un nome al tipo risultante
Chiami la funzione che restituisce il tipo e memorizzi il risultato in una const. Ora dispone di un tipo concreto pronto per essere utilizzato.
const IntBox = Box(i32);Creare un'istanza
Usi il tipo denominato proprio come qualsiasi struct. Qui creiamo una Box che contiene l'intero quarantadue.
const b = IntBox{ .value = 42 };Aggiungere metodi alla struct interna
La struct restituita può contenere anche metodi. Questi vedono il parametro di tipo, quindi rimangono completamente generici.
fn Box(comptime T: type) type {
return struct {
value: T,
fn get(self: @This()) T {
return self.value;
}
};
}Raggiungere il tipo con @This
All'interno di una struct anonima restituita non è possibile nominarla direttamente, quindi i metodi usano @This() per riferirsi al tipo della struct che li contiene.
self: @This()Molti tipi da un'unica definizione
Chiami la funzione con tipi diversi e ottenga struct distinte. Box(i32) e Box(f64) sono tipi separati e completamente verificati.
const FloatBox = Box(f64);Questo meccanismo alimenta la libreria standard
Gli stessi ArrayList e HashMap di Zig sono costruiti esattamente in questo modo: funzioni che accettano un tipo e restituiscono un tipo di contenitore configurato.
const Ints = std.ArrayList(i32);Risolto interamente in fase di compilazione
Tutta questa costruzione dei tipi avviene durante la compilazione, quindi un contenitore generico ha lo stesso costo di uno scritto manualmente.
Passare un allocator durante la crescita
I contenitori che crescono memorizzano un campo allocator, passato durante l'inizializzazione, così il tipo generico indica esplicitamente da dove proviene la memoria.
return struct {
items: []T,
alloc: std.mem.Allocator,
};Verifica rapida
Vuole uno stack generico che funzioni con qualsiasi tipo di elemento in Zig. Quale schema utilizza?
Riepilogo
Scriva una funzione che accetta un type e restituisce un tipo struct. Ogni chiamata produce un contenitore concreto e specializzato. È così che std costruisce le proprie collezioni. 🎯
Domande Frequenti
La lezione «Strutture dati generiche» è gratuita?
Sì — il testo completo di «Strutture dati generiche» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Zig Academy, passa a CoddyKit PRO. Il corso Zig Academy include 4 lezioni in totale.
Cosa imparerò in «Strutture dati generiche»?
Applicare il pattern di una funzione che restituisce un tipo Eserciti Zig Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Zig Academy?
Non è richiesta alcuna esperienza precedente. Zig Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Strutture dati generiche»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Zig Academy?
Sì. Ogni lezione Zig Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Funzioni che accettano un tipo
- Strutture dati generiche
- @TypeOf e riflessione sui tipi
- Parametri anytype