Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ความสามารถในการแก้ไขชั่วคราว

คำอธิบาย

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

เราสามารถทำได้ 2 แนวทาง: คือการจัดการข้อมูลภายในบล็อกขอบเขตย่อย (Nested Block) หรือการประกาศตัวแปรซ้ำ (Variable Shadowing / Rebinding)

ตัวอย่าง

สมมติว่าเรามีเวกเตอร์ที่จำเป็นต้องเรียงลำดับข้อมูล (Sort) ให้เสร็จก่อนนำไปใช้งาน

วิธีใช้บล็อกขอบเขตย่อย (Nested Block):

let data = {
    let mut data = get_vec();
    data.sort();
    data
};

// Here `data` is immutable.

วิธีประกาศตัวแปรซ้ำ (Variable Rebinding / Shadowing):

let mut data = get_vec();
data.sort();
let data = data;

// Here `data` is immutable.

ข้อดี

คอมไพเลอร์จะช่วยรับประกันว่าคุณจะไม่เผลอแก้ไขค่าข้อมูลโดยไม่ได้ตั้งใจหลังจากจุดนั้นเป็นต้นไป

ข้อเสีย

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