Zig Academy · Pelajaran

Pengesahan Comptime dan @compileError

Gagalkan binaan dengan mesej yang jelas.

Pelajaran 3 daripada 413 langkah

Pengesahan Comptime dan @compileError ialah pelajaran Zig Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Zig Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Zig Academy merangkumi sejumlah 4 pelajaran.

Kesan Kesilapan Sebelum Masa Jalanan

Zig membolehkan anda menolak penggunaan yang tidak sah semasa kod dikompil. Binaan terbina dalam @compileError menghentikan binaan dengan mesej yang anda tulis. 🛑

Gagal dengan Mesej yang Jelas

@compileError menerima rentetan masa kompilasi dan membatalkan kompilasi, lalu mencetak teks itu tepat seperti yang diberikan supaya pemanggil mengetahui puncanya.

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

Lindungi Fungsi Generik

Dalam cabang masa kompilasi, anda boleh menolak jenis yang tidak dikehendaki. Di sini hanya integer yang diterima; jenis lain akan mencapai @compileError di tempat panggilan.

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

Kesilapan Menunjukkan Pemanggil

Semakan masa kompilasi berjalan apabila fungsi diwujudkan, jadi kesilapan muncul di tempat jenis yang salah sebenarnya dihantar.

Tegaskan Fakta dengan Masa Kompilasi

Untuk invarian mudah, assert masa kompilasi menghentikan binaan apabila syarat adalah palsu, seperti assert masa jalan tetapi lebih awal.

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

Semak Pengisytiharan

Gunakan @hasDecl untuk mengesahkan bahawa sesuatu jenis menyediakan kaedah atau pemalar sebelum anda memanggilnya, kemudian gagal dengan jelas jika tidak.

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

Semak Medan

Begitu juga, @hasField memberitahu sama ada struct mempunyai medan bernama tertentu, yang berguna apabila mengesahkan bentuk pada masa kompilasi.

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

Bina Mesej daripada Nama Jenis

Gabungkan @typeName dengan std.fmt untuk memasukkan jenis yang bermasalah ke dalam mesej, lalu memberikan pemanggil kesilapan yang tepat dan mudah dibaca.

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

Rentetan Disambungkan pada Masa Kompilasi

Operator ++ menggabungkan rentetan masa kompilasi, jadi anda boleh menyusun teks kesilapan yang terperinci tanpa sebarang peruntukan timbunan.

Tiada Kos Masa Jalanan

Semua pengesahan ini berlaku semasa kompilasi. Program yang berjaya dibina tidak membawa sebarang beban semakan semasa masa jalanan. ⚡

Lebih Baik daripada Ranap Semasa Masa Jalanan

Pengesahan masa kompilasi menukar kemungkinan ranap kepada mesej binaan yang mesra, jadi penggunaan salah dikesan lebih awal dan diterangkan dengan baik.

Semakan Pantas

Anda mahu membatalkan binaan dengan mesej tersuai apabila sesuatu jenis tidak disokong. Apakah yang anda panggil?

Ringkasan

@compileError bersama-sama semakan seperti @hasDecl dan assert masa kompilasi menolak penggunaan yang salah semasa binaan, tanpa kos masa jalanan. 🎯

Percuma untuk bermula

Pelajari Zig dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
30
Pelajaran
120

Soalan Lazim

Adakah pelajaran “Pengesahan Comptime dan @compileError” percuma?

Ya — teks penuh “Pengesahan Comptime dan @compileError” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Zig Academy, tingkat taraf kepada CoddyKit PRO. Kursus Zig Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pengesahan Comptime dan @compileError”?

Gagalkan binaan dengan mesej yang jelas. Anda berlatih Zig Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Zig Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Zig Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Pengesahan Comptime dan @compileError” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Zig Academy ini?

Ya. Setiap pelajaran Zig Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Mencerminkan Medan dengan @typeInfo
  2. Membina Jenis dengan @Type
  3. Pengesahan Comptime dan @compileError
  4. Menjana Kod dengan comptime
← Kembali ke Zig Academy