undefined และหน่วยความจำที่ยังไม่ได้เริ่มต้น
จองพื้นที่จัดเก็บก่อนมีค่า
undefined และหน่วยความจำที่ยังไม่ได้เริ่มต้น เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
จองพื้นที่ไว้ก่อน
บางครั้งคุณต้องการจัดสรรพื้นที่จัดเก็บไว้ก่อนที่จะมีค่ามาใส่ Zig มีคีย์เวิร์ด undefined สำหรับกรณีนี้โดยเฉพาะ
ทำความรู้จัก undefined
การเขียน undefined จะประกาศการผูกค่าที่มีหน่วยความจำ reserved ไว้ แต่ยังไม่มีค่าที่มีความหมาย คุณรับรองว่าจะเติมค่าให้ในเร็ว ๆ นี้
var buffer: [16]u8 = undefined;นี่คือคำรับรอง
undefined คือคำรับรองของคุณว่าจะกำหนดค่าจริงก่อนอ่าน หากอ่านก่อน คุณจะได้ garbage ซึ่งเป็นรูปแบบบิตที่ไม่ระบุแน่ชัด
ใช้บ่อยกับบัฟเฟอร์
อาร์เรย์แบบตายตัวที่คุณกำลังจะเติมค่าเป็นกรณีคลาสสิก คุณกำหนดขนาด buffer ปล่อยให้เป็น undefined แล้วเขียนค่าลงไปทีละองค์ประกอบ
var line: [256]u8 = undefined;ระบบความปลอดภัยช่วยตรวจจับให้
ในโหมด Debug และ ReleaseSafe, Zig จะเติมหน่วยความจำที่เป็น undefined ด้วยไบต์ 0xAA รูปแบบที่เห็นได้ชัดนี้ช่วยให้คุณพบการอ่านก่อนเวลาโดยไม่ตั้งใจ
กำหนดค่าก่อนอ่าน
กฎนั้นง่ายมาก: ต้อง write ค่าจริงก่อนอ่านการผูกค่าที่เป็น undefined เสมอ การอ่านก่อนถือเป็นข้อผิดพลาดที่ Zig ต้องการให้คุณหลีกเลี่ยง
var x: i32 = undefined;
x = 42;undefined ไม่ใช่ null
undefined หมายถึงหน่วยความจำที่ยังไม่ได้กำหนดค่า ส่วน null หมายถึงค่าที่ absent โดยตั้งใจในค่าทางเลือก ทั้งสองอย่างใช้แก้ปัญหาคนละประเภทโดยสิ้นเชิง
ข้ามต้นทุนการเติมศูนย์
การปล่อยพื้นที่จัดเก็บขนาดใหญ่ให้เป็น undefined ช่วยหลีกเลี่ยงต้นทุนการเขียนศูนย์ที่ไม่จำเป็น นี่คือการเลือกด้าน performance โดยเจตนา ไม่ใช่ความขี้เกียจ
ฟิลด์สามารถเป็น undefined ได้
ฟิลด์ของ struct สามารถเริ่มต้นเป็น undefined ได้เช่นกัน หากคุณวางแผนจะกำหนดค่าให้ภายหลัง จุดประสงค์คือการแสดงสถานะ uninitialized อย่างตรงไปตรงมาและชัดเจน
var p: Point = undefined;ใช้อย่างประหยัด
การผูกค่าส่วนใหญ่ควรมีค่าจริงตั้งแต่เริ่มต้น เลือกใช้ undefined เฉพาะเมื่อการจอง storage ดิบเป็นสิ่งที่คุณต้องการจริง ๆ
ความชัดเจนดีกว่าสิ่งที่ซ่อนอยู่
ภาษาอื่นอาจปล่อยให้ตัวแปรยังไม่ได้กำหนดค่าโดยไม่แจ้งให้ทราบ แต่ Zig ทำให้เรื่องนี้ explicit เพื่อให้ทุกคนที่อ่านโค้ดเห็นเจตนาได้อย่างชัดเจน
ตรวจสอบอย่างรวดเร็ว
คุณเขียน var x: i32 = undefined; แล้วอ่าน x ก่อนกำหนดค่า คุณได้ทำอะไรลงไป
สรุป
คุณได้เรียนรู้ว่า undefined จองพื้นที่จัดเก็บโดยไม่มีค่า ซึ่งมักใช้กับบัฟเฟอร์ ต้องกำหนดค่าก่อนอ่านเสมอ และจำไว้ว่า undefined แตกต่างจาก null 📦
คำถามที่พบบ่อย
บทเรียน “undefined และหน่วยความจำที่ยังไม่ได้เริ่มต้น” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “undefined และหน่วยความจำที่ยังไม่ได้เริ่มต้น” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “undefined และหน่วยความจำที่ยังไม่ได้เริ่มต้น”
จองพื้นที่จัดเก็บก่อนมีค่า คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “undefined และหน่วยความจำที่ยังไม่ได้เริ่มต้น” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม
ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- const สำหรับค่าที่ไม่เปลี่ยนแปลง
- var สำหรับสถานะที่เปลี่ยนแปลงได้
- การอนุมานชนิดเทียบกับการระบุชนิดอย่างชัดเจน
- undefined และหน่วยความจำที่ยังไม่ได้เริ่มต้น