ฟังก์ชันที่รับชนิดข้อมูล
สร้าง泛泛ด้วยพารามิเตอร์ชนิด comptime T
ฟังก์ชันที่รับชนิดข้อมูล เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
เจเนริกในแบบ Zig
Zig ไม่มีไวยากรณ์เจเนริกแยกต่างหาก แต่ฟังก์ชันสามารถรับ ชนิดข้อมูล เป็นพารามิเตอร์ตัวหนึ่ง และใช้งานเหมือนค่าอื่น ๆ ได้ ✨
พารามิเตอร์ชนิดข้อมูลเป็น comptime
เนื่องจากชนิดข้อมูลต้องทราบเมื่อสร้างโค้ด พารามิเตอร์ชนิดข้อมูลจึงถูกกำกับด้วย comptime เสมอ ผู้เรียกจะส่งชนิดข้อมูลจริงเข้าไป
fn first(comptime T: type, items: []const T) T {
return items[0];
}type เป็นชนิดข้อมูลจริง
ใน Zig คำว่า type เองก็เป็นชนิดข้อมูล ดังนั้นจึงประกาศพารามิเตอร์เป็น type เพื่อหมายถึงชนิดข้อมูลใด ๆ ก็ได้
comptime T: typeใช้ T ในลายเซ็น
เมื่อคุณตั้งชื่อชนิดข้อมูลเป็น T แล้ว คุณสามารถใช้ชื่อนี้กับพารามิเตอร์ถัดไปและชนิดข้อมูลที่ส่งคืน เพื่อเชื่อมโยงทั้งหมดเข้าด้วยกัน
fn max(comptime T: type, a: T, b: T) T {
return if (a > b) a else b;
}เรียกใช้ฟังก์ชันเจเนริก
เมื่อต้องการเรียกใช้ ให้ส่งชนิดข้อมูลจริงก่อน แล้วจึงส่งอาร์กิวเมนต์ปกติ ในที่นี้เราขอค่าที่มากกว่าระหว่างค่า i32 สองค่า
const m = max(i32, 3, 9);ฟังก์ชันเดียว หลายชนิดข้อมูล
ฟังก์ชันเดียวกันทำงานได้กับชนิดข้อมูลใด ๆ ที่รองรับการดำเนินการที่คุณใช้ เปลี่ยน i32 เป็น f64 แล้วโค้ดก็ยังใช้ได้
const f = max(f64, 1.5, 2.5);Zig ปรับเฉพาะแต่ละการเรียก
สำหรับชนิดข้อมูลที่ส่งเข้าไปแต่ละชนิด Zig จะสร้างสำเนาฟังก์ชันเฉพาะขึ้นมา นี่คือ การสร้างรูปแบบเฉพาะ ซึ่งทำขณะคอมไพล์
ตัวฟังก์ชันยังคงเป็นเจเนริก
คุณเขียนชนิดข้อมูลอย่างชัดเจนตอนเรียกใช้ แต่ตัวฟังก์ชันยังคงเป็นเจเนริก Zig จะตรวจสอบว่าการดำเนินการที่ใช้ถูกต้องสำหรับ T ใด ๆ ที่ส่งเข้ามา
type ไม่มีการห่อค่าแฝง
การส่ง ชนิดข้อมูล จริงแตกต่างจากพหุรูปแบบขณะรัน: ไม่มี vtable และไม่มีการห่อค่า มีเพียงสำเนาเฉพาะที่เลือกตอนสร้างโค้ด
ข้อผิดพลาดปรากฏขณะคอมไพล์
หากคุณเรียก max ด้วยชนิดข้อมูลที่ไม่มีตัวดำเนินการมากกว่า Zig จะแจ้งปัญหาเมื่อสร้าง รูปแบบเฉพาะ นั้น ไม่ใช่ขณะรัน
พารามิเตอร์ชนิดข้อมูลมาก่อน
ตามธรรมเนียม พารามิเตอร์ชนิดข้อมูลแบบ comptime จะอยู่ก่อนพารามิเตอร์ค่า เพื่อให้ทราบชนิดข้อมูลก่อนอธิบายข้อมูล
fn clone(comptime T: type, value: T) T {
return value;
}ตรวจสอบอย่างรวดเร็ว
คุณต้องการฟังก์ชันที่ทำงานกับชนิดข้อมูลมากมายใน Zig คุณจะประกาศพารามิเตอร์ชนิดข้อมูลอย่างไร
สรุปทบทวน
ส่งพารามิเตอร์ comptime T: type เพื่อทำให้ฟังก์ชันเป็นเจเนริก Zig จะสร้างเวอร์ชันเฉพาะสำหรับชนิดข้อมูลทุกชนิดที่คุณใช้งานจริง 🎯
เรียนรู้ Zig ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “ฟังก์ชันที่รับชนิดข้อมูล” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ฟังก์ชันที่รับชนิดข้อมูล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ฟังก์ชันที่รับชนิดข้อมูล”
สร้าง泛泛ด้วยพารามิเตอร์ชนิด comptime T คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “ฟังก์ชันที่รับชนิดข้อมูล” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม
ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ฟังก์ชันที่รับชนิดข้อมูล
- โครงสร้างข้อมูล泛泛
- @TypeOf และการสะท้อนชนิดข้อมูล
- พารามิเตอร์ anytype