0Pricing
Zig Academy · บทเรียน

การสร้างโค้ดด้วย comptime

สร้างตรรกะที่ซ้ำกันโดยอัตโนมัติ

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

ให้คอมไพเลอร์เขียนส่วนซ้ำ ๆ

แทนที่จะคัดลอกโค้ดที่เกือบเหมือนกัน ให้คุณอธิบายรูปแบบเพียงครั้งเดียว แล้วให้ comptime สร้างรูปแบบย่อยแต่ละแบบให้ ⚙️

inline for คลี่ลูปออก

inline for ที่ทำงานกับรายการ comptime จะขยายเป็นคำสั่งแยกกัน หนึ่งคำสั่งต่อหนึ่งรายการ และฝังทั้งหมดไว้ในโปรแกรมสุดท้าย

inline for (.{ 1, 2, 3 }) |n| {
    std.debug.print("{}\n", .{n});
}

วนผ่านฟิลด์ของชนิดข้อมูล

ผสาน reflection เข้ากับการคลี่ลูป: เดินผ่านทุกฟิลด์ของ struct แล้วสร้างโค้ดที่สอดคล้องกันสำหรับแต่ละฟิลด์ โดยอัตโนมัติ

inline for (@typeInfo(T).Struct.fields) |field| {
    std.debug.print("{s}\n", .{field.name});
}

เข้าถึงฟิลด์ด้วยชื่อ

ใช้ @field เพื่ออ่านฟิลด์ที่มีชื่อเป็นสตริง comptime นี่คือวิธีที่โค้ดที่สร้างขึ้นเข้าถึงแต่ละฟิลด์แบบทั่วไป

const value = @field(my_struct, field.name);

สร้างเครื่องพิมพ์ Generic

เครื่องมือเหล่านี้ช่วยให้คุณเขียนฟังก์ชันเดียวที่พิมพ์ struct ใด ๆ ก็ได้ โดยขยายการทำงานเพื่อจัดการแต่ละฟิลด์ใน ขณะคอมไพล์

inline for (@typeInfo(@TypeOf(s)).Struct.fields) |f| {
    std.debug.print("{s}={any}\n", .{ f.name, @field(s, f.name) });
}

สร้างการประกาศภายในชนิดข้อมูล

ภายในฟังก์ชันที่คืนค่าชนิดข้อมูล คุณสามารถใช้ลูปและเงื่อนไข แล้วจึง return struct เพื่อฝังโครงสร้างที่คำนวณได้ลงในชนิดข้อมูล

fn Vec(comptime n: usize) type {
    return struct { data: [n]f32 };
}

Switch สร้างโค้ดแยกตามรูปแบบ

switch ที่ใช้กับแท็ก comptime จะคอมไพล์เหลือเฉพาะแขนงที่เลือก คุณจึงปรับพฤติกรรมให้เหมาะกับแต่ละกรณีของ enum หรือ union ได้

บล็อก comptime ทำงานล่วงหน้า

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

const table = comptime blk: {
    var t: [4]u8 = undefined;
    break :blk t;
};

สิ่งนี้มาแทนที่แมโคร

ในจุดที่ C ต้องใช้ตัวประมวลผลล่วงหน้า Zig ใช้โค้ดปกติใน ขณะคอมไพล์ ภาษาเดียวกันจึงใช้เขียนได้ทั้งโปรแกรมและตัวสร้างโปรแกรม

รักษาความถูกต้องของโค้ดที่สร้างขึ้น

ใช้การสร้างโค้ดคู่กับตัวป้องกัน @compileError เพื่อให้โครงสร้างที่ไม่รองรับล้มเหลวอย่างชัดเจน แทนที่จะสร้างผลลัพธ์ที่คาดเดาไม่ได้

ทรงพลังแต่อ่านง่าย

เนื่องจากเป็นเพียง Zig ตรรกะที่สร้างขึ้นจึงยังแกะรอยและตรวจสอบชนิดข้อมูลได้ คุณจะได้พลังแบบแมโครโดยไม่ต้องมีภาษาแยกต่างหาก ✨

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

คุณต้องการสร้างคำสั่งหนึ่งคำสั่งต่อฟิลด์ของ struct ในขณะคอมไพล์ โครงสร้างใดใช้คลี่รายการฟิลด์ออก

ทบทวน

ด้วย inline for, @field และฟังก์ชันที่คืนค่าชนิดข้อมูล comptime สามารถสร้างโค้ดส่วนซ้ำ ๆ ได้อย่างปลอดภัย และใช้แทนแมโครของ C 🎯

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

บทเรียน “การสร้างโค้ดด้วย comptime” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การสร้างโค้ดด้วย comptime”

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

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

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

บทเรียน “การสร้างโค้ดด้วย comptime” ใช้เวลานานแค่ไหน

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

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

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

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

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