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

@TypeOf และการสะท้อนชนิดข้อมูล

ตรวจสอบชนิดข้อมูลเพื่อรักษาความ泛泛

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

สอบถามเกี่ยวกับชนิดข้อมูล

โค้ดเจเนริกมักต้องทราบชนิดข้อมูลของค่าโดยไม่ต้องเขียนชนิดข้อมูลนั้นเอง Zig มีบิลท์อิน @TypeOf สำหรับเรื่องนี้โดยเฉพาะ 🔍

@TypeOf ส่งคืนชนิดข้อมูล

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

const T = @TypeOf(value);

ไม่ได้เรียกใช้นิพจน์

อาร์กิวเมนต์ของ @TypeOf จะถูกตรวจสอบเท่านั้น ไม่ถูกเรียกใช้ แม้ภายในจะมีการเรียกฟังก์ชัน ก็เพียงตรวจดูโดยไม่ทำงานจริง

เก็บชนิดข้อมูลของพารามิเตอร์

ภายในฟังก์ชันเจเนริก คุณสามารถตั้งชื่อชนิดข้อมูลของอาร์กิวเมนต์ใด ๆ และนำกลับมาใช้ได้ เช่น ใช้ประกาศตัวแปร ภายในที่มีชนิดตรงกัน

fn echo(x: anytype) void {
    const T = @TypeOf(x);
    _ = T;
}

รับชื่อที่อ่านได้ง่าย

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

const name = @typeName(i32);

สะท้อนเชิงลึกด้วย @typeInfo

หากต้องการรายละเอียดครบถ้วน @typeInfo จะส่งคืนยูเนียนที่มีแท็ก ซึ่งอธิบายชนิดข้อมูลว่าเป็นจำนวนเต็ม struct พอยน์เตอร์ หรือชนิดอื่น ๆ

const info = @typeInfo(i32);

แยกแขนงตามประเภทของชนิดข้อมูล

เนื่องจากผลลัพธ์เป็น ยูเนียนที่มีแท็ก คุณจึงสามารถใช้ switch เพื่อจัดการจำนวนเต็ม จำนวนทศนิยม และ struct แตกต่างกันในฟังก์ชันเจเนริกเดียว

switch (@typeInfo(T)) {
    .int => {},
    else => {},
}

อ่านความกว้างบิตของจำนวนเต็ม

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

const bits = @typeInfo(u16).int.bits;

การสะท้อนช่วยให้โค้ดเป็นเจเนริก

ด้วยการตรวจสอบชนิดข้อมูลแทนการกำหนดชนิดข้อมูลตายตัว ฟังก์ชันเดียวจึงรองรับชนิดข้อมูลอินพุตมากมายได้อย่างถูกต้อง นี่คือหัวใจของ การสะท้อนใน Zig ✨

ทั้งหมดเกิดขึ้นขณะคอมไพล์

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

แสดงรายการฟิลด์ของ struct

สำหรับ struct นั้น @typeInfo จะแสดงอาร์เรย์ฟิลด์ที่คุณสามารถวนดูขณะคอมไพล์ เพื่ออ่านชื่อและชนิดข้อมูลของแต่ละฟิลด์

const fields = @typeInfo(Point).@"struct".fields;

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

ภายในฟังก์ชันเจเนริก คุณมีค่า x และต้องการทราบชนิดข้อมูลของมัน บิลท์อินใดจะให้ข้อมูลนี้

สรุปทบทวน

ใช้ @TypeOf เพื่อดูชนิดข้อมูลของค่า และใช้ @typeInfo เพื่อตรวจสอบโครงสร้างของชนิดข้อมูล การใช้ switch กับข้อมูลนั้นทำให้ฟังก์ชันเดียวปรับใช้กับชนิดข้อมูลมากมายได้ 🎯

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

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

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

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

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

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

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

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

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

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

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

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

  1. ฟังก์ชันที่รับชนิดข้อมูล
  2. โครงสร้างข้อมูล泛泛
  3. @TypeOf และการสะท้อนชนิดข้อมูล
  4. พารามิเตอร์ anytype
← กลับไปที่ Zig Academy