Zig Academy · บทเรียน

การสร้างชนิดข้อมูลด้วย @Type

สร้างชนิดข้อมูลใหม่ด้วยโปรแกรม

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

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

สิ่งที่ตรงข้ามกับ @typeInfo

หาก @typeInfo เปลี่ยนชนิดให้เป็นข้อมูล @Type ก็จะเปลี่ยนข้อมูลกลับเป็นชนิดจริง ทั้งสองอย่างทำให้คุณปรับรูปร่างชนิดขณะคอมไพล์ได้ 🛠️

ส่งค่า Type.Info ให้มัน

@Type รับค่า std.builtin.Type และสร้างชนิดจริงที่ค่านั้นอธิบายขึ้นมา คุณส่งคำอธิบายให้มัน แล้วมันจะส่งชนิดกลับมา

const T = @Type(.{ .Int = .{ .signedness = .unsigned, .bits = 8 } });

สร้างชนิดจำนวนเต็ม

ตัวอย่างด้านบนสร้าง u8 ขึ้นใหม่ทั้งหมด เปลี่ยน bits เป็น 16 แล้วคุณจะได้ u16 โดยทุกอย่างถูกตัดสินใจขณะโปรแกรมคอมไพล์

const U16 = @Type(.{ .Int = .{ .signedness = .unsigned, .bits = 16 } });

แปลงชนิดไปกลับ

การส่งชนิดข้อมูลผ่าน @typeInfo แล้วส่งต่อให้ @Type จะได้ชนิดข้อมูลเดิมกลับมา นี่พิสูจน์ว่าบิลด์อินทั้งสองเป็นฟังก์ชันผกผันกันอย่างสมบูรณ์

const Same = @Type(@typeInfo(u32));

อธิบาย Struct ในรูปข้อมูล

หากต้องการสร้าง struct ให้กรอกข้อมูลลงในอาร์เรย์ StructField แต่ละฟิลด์ต้องมีชื่อ ชนิดข้อมูล การจัดแนว และพอยน์เตอร์ค่าเริ่มต้น

const f = std.builtin.Type.StructField;

ประกอบข้อมูล Struct

ห่อฟิลด์ของคุณไว้ในข้อมูล .Struct พร้อมเลย์เอาต์และแฟล็ก is_tuple จากนั้นส่งข้อมูลทั้งหมดให้ @Type

const info = .{ .Struct = .{
    .layout = .auto,
    .fields = my_fields,
    .decls = &.{},
    .is_tuple = false,
} };

สร้างชนิด Struct ใหม่

เรียกใช้ @Type กับข้อมูลนั้น แล้วคุณจะได้ชนิด struct ใหม่เอี่ยมที่สร้างตามตรรกะของคุณเอง แทนที่จะเขียนขึ้นด้วยมือ

const Generated = @Type(info);

ค่าเริ่มต้นต้องใช้พอยน์เตอร์ comptime

default_value ของฟิลด์คือพอยน์เตอร์ const แบบเลือกมีค่าได้ซึ่งชี้ไปยังค่า หรือเป็น null เมื่อไม่มีค่าเริ่มต้น พอยน์เตอร์นี้ต้องเป็นค่าที่ทราบได้ใน comptime

const dv: ?*const anyopaque = &@as(u8, 0);

สร้าง Enum และชนิดอื่น ๆ

เทคนิคเดียวกันนี้ใช้ได้กับชนิดอื่นนอกเหนือจาก struct ด้วย ข้อมูล .Enum ทำให้ @Type สังเคราะห์ชนิด enum จากรายการสมาชิกที่คำนวณได้

เหตุใดจึงต้องสร้างชนิดข้อมูล

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

ใช้คู่กับ Reflection

รูปแบบที่ทรงพลังที่สุดคืออ่านชนิดข้อมูลด้วย @typeInfo แปลงข้อมูล แล้วสร้างชนิดใหม่ด้วย @Type เช่น เพิ่มฟิลด์

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

คุณมีค่า std.builtin.Type ที่อธิบาย struct อยู่ อะไรจะเปลี่ยนค่านี้ให้เป็นชนิดข้อมูลที่ใช้งานได้

ทบทวน

@Type สร้างชนิดข้อมูลจริงจากข้อมูล Type.Info ซึ่งเป็นฟังก์ชันผกผันของ @typeInfo ใช้ทั้งสองอย่างร่วมกันเพื่ออ่าน แปลง และสร้างชนิดข้อมูลขึ้นใหม่ 🎯

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

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

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

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

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

บทเรียน “การสร้างชนิดข้อมูลด้วย @Type” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การสร้างชนิดข้อมูลด้วย @Type”

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

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

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

บทเรียน “การสร้างชนิดข้อมูลด้วย @Type” ใช้เวลานานแค่ไหน

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

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

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

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

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