ความสามารถในการแก้ไขชั่วคราว
คำอธิบาย
ในหลายกรณี เราจำเป็นต้องสร้างและประมวลผลข้อมูลในช่วงเริ่มต้น แต่หลังจากขั้นตอนเตรียมข้อมูลเสร็จสิ้นแล้ว ข้อมูลชุดนั้นจะถูกเปิดอ่านเพื่อตรวจสอบเพียงอย่างเดียวและต้องไม่มีการแก้ไขค่าใดๆ อีก เราสามารถแสดงเจตนารมณ์นี้ให้ชัดเจนและให้คอมไพเลอร์ช่วยตรวจสอบได้ โดยการเปลี่ยนตัวแปรที่เป็น 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.
ข้อดี
คอมไพเลอร์จะช่วยรับประกันว่าคุณจะไม่เผลอแก้ไขค่าข้อมูลโดยไม่ได้ตั้งใจหลังจากจุดนั้นเป็นต้นไป
ข้อเสีย
การใช้บล็อกขอบเขตย่อยจะทำให้โค้ดมีการเยื้องบรรทัดเพิ่มขึ้นอีกระดับ และต้องเพิ่มบรรทัดเพื่อส่งคืนข้อมูลออกจากบล็อกหรือเพื่อประกาศตัวแปรซ้ำ