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

การส่งค่าเทียบกับการส่งข้อมูลอ้างอิง

อาร์กิวเมนต์ไปถึงฟังก์ชันของคุณได้อย่างไร

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

อาร์กิวเมนต์เดินทางอย่างไร

เมื่อคุณเรียกฟังก์ชัน Zig ต้องนำข้อมูลของคุณเข้าไปภายในฟังก์ชัน มีอยู่สองวิธี คือส่งค่าไปโดยตรง หรือส่งการอ้างอิงไปยังค่านั้น 🚚

การส่งแบบค่าเป็นการคัดลอก

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

fn addOne(n: i32) i32 {
    return n + 1;
}

สำเนาแยกจากกันอย่างอิสระ

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

พารามิเตอร์เปลี่ยนแปลงไม่ได้

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

ส่งพอยน์เตอร์เพื่อใช้ข้อมูลร่วมกัน

หากต้องการให้ฟังก์ชันเปลี่ยนข้อมูลของคุณ ให้ส่งพอยน์เตอร์ด้วย *T จากนั้นฟังก์ชันจะทำงานกับค่าจริงของคุณ ไม่ใช่สำเนา

fn bump(n: *i32) void {
    n.* += 1;
}

ยกเลิกการอ้างอิงเพื่อเข้าถึงค่า

ภายในฟังก์ชัน ให้ใช้ .* เพื่ออ่านหรือเขียนผ่านพอยน์เตอร์ n.* += 1 จะอัปเดตค่าที่ผู้เรียกยังถืออยู่

รับที่อยู่ด้วย &

ขณะเรียกฟังก์ชัน ให้ส่งที่อยู่โดยใช้ & จากนั้น bump(&count) จะทำให้ฟังก์ชันแก้ไข count ได้โดยตรง

var count: i32 = 0;
bump(&count); // count is now 1

ข้อมูลขนาดใหญ่เหมาะกับการอ้างอิง

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

fn area(r: *const Rect) i32 {
    return r.w * r.h;
}

พอยน์เตอร์ const หมายถึงอ่านได้อย่างเดียว

*const T อนุญาตให้ฟังก์ชันอ่านข้อมูลของคุณ แต่ไม่สามารถเขียนข้อมูลนั้นได้ คุณจึงได้ความเร็วโดยไม่สูญเสียความปลอดภัย

สไลซ์เป็นมุมมองอยู่แล้ว

สไลซ์อย่าง []const u8 เก็บทั้งพอยน์เตอร์และความยาวไว้ จึงส่งต่อเพื่อใช้ข้อมูลต้นทางร่วมกันได้โดยไม่ต้องคัดลอกทั้งหมด

เลือกตามเจตนาการใช้งาน

ส่งตามค่าเมื่อข้อมูลมีขนาดเล็กและอ่านอย่างเดียว ส่งพอยน์เตอร์เมื่อจำเป็นต้องแก้ไขข้อมูลหรือเมื่อข้อมูลมีขนาดใหญ่

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

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

ทบทวน

ค่าจะถูกคัดลอกและไม่สามารถเปลี่ยนค่าต้นฉบับของคุณได้ ส่วนพอยน์เตอร์ใช้ข้อมูลร่วมกัน ใช้ *T เพื่อแก้ไขข้อมูล และใช้ *const T เพื่ออ่านข้อมูลขนาดใหญ่ได้อย่างรวดเร็ว 🎯

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

บทเรียน “การส่งค่าเทียบกับการส่งข้อมูลอ้างอิง” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การส่งค่าเทียบกับการส่งข้อมูลอ้างอิง”

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

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

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

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

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

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

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

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

  1. ไวยากรณ์ฟังก์ชันและชนิดค่าที่คืน
  2. การส่งค่าเทียบกับการส่งข้อมูลอ้างอิง
  3. ฟังก์ชัน pub และการมองเห็น
  4. การเรียกซ้ำและการคืนค่าหลายค่า
← กลับไปที่ Zig Academy