การตรวจสอบขณะคอมไพล์และ @compileError
หยุดการสร้างโปรแกรมพร้อมข้อความที่ชัดเจน
การตรวจสอบขณะคอมไพล์และ @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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตรวจสอบฟิลด์ด้วย @typeInfo
- การสร้างชนิดข้อมูลด้วย @Type
- การตรวจสอบขณะคอมไพล์และ @compileError
- การสร้างโค้ดด้วย comptime