Zig Academy · Lezione

Convalida a tempo di compilazione e @compileError

Blocchi la build con messaggi chiari.

Lezione 3 di 413 passaggi

Convalida a tempo di compilazione e @compileError è una lezione Zig Academy gratuita su CoddyKit. Questa è la lezione 3 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.

Rilevare gli errori prima dell'esecuzione

Zig permette di rifiutare gli utilizzi errati durante la compilazione. Il builtin @compileError interrompe la compilazione mostrando un messaggio scritto da Lei. 🛑

Fallire con un messaggio chiaro

@compileError accetta una stringa comptime e interrompe la compilazione, mostrando esattamente quel testo, così chi effettua la chiamata sa che cosa non ha funzionato.

@compileError("this type is not supported");

Proteggere una funzione generica

All'interno di un ramo comptime può rifiutare i tipi non desiderati. In questo caso passano solo gli interi; tutti gli altri raggiungono @compileError nel punto della chiamata.

if (@typeInfo(T) != .Int) {
    @compileError("T must be an integer");
}

Gli errori indicano il chiamante

Un controllo comptime viene eseguito quando la funzione viene istanziata, quindi l'errore appare nel punto in cui è stato effettivamente passato il tipo errato.

Verificare le condizioni con comptime

Per gli invarianti semplici, comptime assert interrompe la compilazione quando una condizione è falsa, in modo simile a un assert a runtime, ma in anticipo.

comptime std.debug.assert(@sizeOf(T) <= 8);

Verificare una dichiarazione

Utilizzi @hasDecl per confermare che un tipo fornisca un metodo o una costante prima di chiamarlo, quindi segnali chiaramente l'errore se non li fornisce.

if (!@hasDecl(T, "init")) {
    @compileError("T needs an init function");
}

Verificare un campo

Analogamente, @hasField indica se una struct contiene un campo con un determinato nome; è utile per validare la struttura a compile time.

const ok = @hasField(Config, "port");

Costruire messaggi dai nomi dei tipi

Combini @typeName con std.fmt per inserire nel messaggio il tipo che ha causato il problema e fornire ai chiamanti un errore preciso e leggibile.

@compileError("unsupported type: " ++ @typeName(T));

Le stringhe si concatenano a compile time

L'operatore ++ concatena le stringhe comptime, consentendo di comporre testi di errore dettagliati senza alcuna allocazione nell'heap.

Costo a runtime nullo

Tutta questa validazione avviene durante la compilazione. Un programma compilato correttamente non ha alcun sovraccarico di controllo a runtime. ⚡

Meglio di un arresto a runtime

La validazione comptime trasforma un possibile arresto in un messaggio comprensibile durante la compilazione, così l'uso errato viene rilevato tempestivamente e spiegato bene.

Verifica rapida

Vuole interrompere la compilazione con un messaggio personalizzato quando un tipo non è supportato. Che cosa deve chiamare?

Riepilogo

@compileError, insieme a controlli come @hasDecl e comptime assert, rifiuta gli utilizzi errati durante la compilazione, senza alcun costo a runtime. 🎯

Gratis per iniziare

Impara Zig con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
30
Lezioni
120

Domande Frequenti

La lezione «Convalida a tempo di compilazione e @compileError» è gratuita?

Sì — il testo completo di «Convalida a tempo di compilazione e @compileError» è 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 «Convalida a tempo di compilazione e @compileError»?

Blocchi la build con messaggi chiari. 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 3 di 4.

Quanto tempo richiede la lezione «Convalida a tempo di compilazione e @compileError»?

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

  1. Riflettere sui campi con @typeInfo
  2. Creare tipi con @Type
  3. Convalida a tempo di compilazione e @compileError
  4. Generare codice con comptime
← Torna a Zig Academy