Zig Academy · บทเรียน

การตรวจสอบขณะคอมไพล์และ @compileError

หยุดการสร้างโปรแกรมพร้อมข้อความที่ชัดเจน

บทเรียน 3 จาก 413 ขั้นตอน

การตรวจสอบขณะคอมไพล์และ @compileError เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

จับข้อผิดพลาดก่อนรันไทม์

Zig ช่วยให้คุณปฏิเสธการใช้งานที่ไม่ถูกต้องขณะคอมไพล์โค้ดได้ บิลด์อิน @compileError จะหยุดการสร้างโปรแกรมพร้อมข้อความที่คุณเขียนขึ้น 🛑

ล้มเหลวพร้อมข้อความที่ชัดเจน

@compileError รับสตริง comptime และยกเลิกการคอมไพล์ โดยพิมพ์ข้อความนั้นตรง ๆ เพื่อให้ผู้เรียกทราบว่าเกิดข้อผิดพลาดอะไรขึ้น

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

ป้องกันฟังก์ชัน Generic

ภายในแขนง comptime คุณสามารถปฏิเสธชนิดข้อมูลที่ไม่ต้องการได้ ในกรณีนี้มีเพียงจำนวนเต็มเท่านั้นที่ผ่าน ชนิดอื่น ๆ จะพบกับ @compileError ณ จุดที่เรียกใช้

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

ข้อผิดพลาดชี้ไปยังผู้เรียก

การตรวจสอบ comptime จะทำงานเมื่อสร้างอินสแตนซ์ของฟังก์ชัน ดังนั้น ข้อผิดพลาด จึงปรากฏตรงจุดที่ส่งชนิดข้อมูลผิดเข้ามาจริง ๆ

ยืนยันข้อเท็จจริงด้วย comptime

สำหรับเงื่อนไขคงรูปแบบง่าย ๆ comptime assert จะหยุดการสร้างโปรแกรมเมื่อเงื่อนไขเป็นเท็จ คล้ายกับ assert ตอนรันไทม์แต่ตรวจพบได้เร็วกว่า

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

ตรวจสอบการประกาศ

ใช้ @hasDecl เพื่อยืนยันว่าชนิดข้อมูลมีเมธอดหรือค่าคงที่ก่อนเรียกใช้ จากนั้นจึงล้มเหลวพร้อมข้อความที่ชัดเจนหากไม่มี

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

ตรวจสอบฟิลด์

เช่นเดียวกัน @hasField จะบอกว่า struct มีฟิลด์ตามชื่อที่ระบุหรือไม่ ซึ่งมีประโยชน์เมื่อตรวจสอบโครงสร้างข้อมูลขณะคอมไพล์

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

สร้างข้อความจากชื่อชนิดข้อมูล

ผสาน @typeName เข้ากับ std.fmt เพื่อฝังชนิดข้อมูลที่ก่อปัญหาไว้ในข้อความ ทำให้ผู้เรียกได้รับข้อผิดพลาดที่แม่นยำและอ่านเข้าใจง่าย

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

ต่อสตริงขณะคอมไพล์

ตัวดำเนินการ ++ ใช้ต่อสตริง comptime คุณจึงประกอบข้อความข้อผิดพลาดโดยละเอียดได้โดยไม่ต้องจองหน่วยความจำบนฮีป

ไม่มีต้นทุนขณะรันไทม์

การตรวจสอบทั้งหมดนี้เกิดขึ้นระหว่างการคอมไพล์ โปรแกรมที่สร้างสำเร็จแล้วจึงมีค่าใช้จ่ายในการตรวจสอบขณะรันไทม์เป็น ศูนย์ ⚡

ดีกว่าโปรแกรมหยุดทำงานตอนรันไทม์

การตรวจสอบ comptime เปลี่ยนโอกาสที่โปรแกรมจะหยุดทำงานให้กลายเป็นข้อความที่เป็นมิตรระหว่างการสร้างโปรแกรม ทำให้จับการใช้งานผิดได้ ตั้งแต่เนิ่น ๆ พร้อมคำอธิบายที่ดี

ตรวจสอบอย่างรวดเร็ว

คุณต้องการยกเลิกการสร้างโปรแกรมพร้อมข้อความที่กำหนดเองเมื่อชนิดข้อมูลไม่รองรับ ควรเรียกใช้อะไร

ทบทวน

@compileError ร่วมกับการตรวจสอบอย่าง @hasDecl และ comptime assert จะปฏิเสธการใช้งานที่ไม่ถูกต้องระหว่างการสร้างโปรแกรม โดยไม่มีต้นทุนขณะรันไทม์ 🎯

เริ่มต้นได้ฟรี

เรียนรู้ Zig ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

คำถามที่พบบ่อย

บทเรียน “การตรวจสอบขณะคอมไพล์และ @compileError” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การตรวจสอบขณะคอมไพล์และ @compileError” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การตรวจสอบขณะคอมไพล์และ @compileError”

หยุดการสร้างโปรแกรมพร้อมข้อความที่ชัดเจน คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การตรวจสอบขณะคอมไพล์และ @compileError” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม

ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การตรวจสอบฟิลด์ด้วย @typeInfo
  2. การสร้างชนิดข้อมูลด้วย @Type
  3. การตรวจสอบขณะคอมไพล์และ @compileError
  4. การสร้างโค้ดด้วย comptime
← กลับไปที่ Zig Academy