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