Immutable vs Mutable ในภาษาโปรแกรมต่าง ๆ

Sharing is caring!

บทนำ

ในโลกของการเขียนโปรแกรม เรามักจะพบคำว่า Immutable (เปลี่ยนแปลงค่าไม่ได้) และ Mutable (เปลี่ยนแปลงค่าได้) อยู่เสมอ โดยเฉพาะในการจัดการข้อมูล ตัวแปร หรือโครงสร้างข้อมูล ซึ่งความเข้าใจเรื่องนี้จะช่วยให้เราเขียนโปรแกรมได้อย่างมีประสิทธิภาพและปลอดภัยยิ่งขึ้น

Immutable คืออะไร?

Immutable หมายถึง ค่าของข้อมูลไม่สามารถถูกเปลี่ยนแปลงได้หลังจากที่ถูกกำหนดแล้ว เช่น ค่าตัวแปรที่ถูกกำหนดด้วย const ใน JavaScript หรือ final ใน Java

ตัวอย่างใน JavaScript

const name = 'Alice';
name = 'Bob'; // ❌ Error: Assignment to constant variable

ตัวอย่างใน Python

name = "Alice"
name[0] = "M"  # ❌ Error: 'str' object does not support item assignment

Mutable คืออะไร?

Mutable หมายถึง ค่าของข้อมูลสามารถเปลี่ยนแปลงได้ เช่น การเปลี่ยนแปลงค่าภายใน list หรือ dictionary ใน Python หรือ array ใน JavaScript

ตัวอย่างใน Python

names = ['Alice', 'Bob']
names[1] = 'Eve'  # ✅ เปลี่ยนค่าได้
print(names)  # ['Alice', 'Eve']

ตัวอย่างใน JavaScript

const arr = ['Alice', 'Bob'];
arr[1] = 'Eve';  // ✅ แม้ใช้ const แต่ค่าภายใน array เปลี่ยนได้
console.log(arr); // ['Alice', 'Eve']

ภาษาโปรแกรมกับ Immutable/Mutable

ภาษาค่าที่ Immutableค่าที่ Mutable
JavaScriptString, NumberArray, Object
PythonString, Tuple, intList, Dict, Set
JavaString, Wrapper Classes (Integer, Boolean)Array, custom objects
Rustค่า default immutableต้องใช้ mut keyword
GoStringSlices, Maps

ข้อดีของ Immutable

  • ✅ ลดปัญหา side-effect จากการเปลี่ยนค่าโดยไม่ตั้งใจ
  • ✅ ทำให้ code thread-safe ง่ายขึ้น
  • ✅ เหมาะกับ Functional Programming

ข้อเสียของ Immutable

  • 🔁 ต้องสร้าง object ใหม่ทุกครั้งที่ต้องการเปลี่ยนค่า
  • 💾 อาจใช้ memory มากขึ้นหากไม่จัดการดี

เมื่อไรควรใช้ Immutable?

  • 📦 เมื่อข้อมูลไม่ควรถูกเปลี่ยน เช่น config
  • 🚀 ในระบบ concurrent เพื่อเลี่ยง race condition
  • 🔄 ในการสร้าง cache ที่ไม่เปลี่ยนแปลง

เมื่อไรควรใช้ Mutable?

  • 🧮 ในกรณีข้อมูลเปลี่ยนแปลงบ่อย เช่น list ของ cart
  • ⚡ เพื่อประหยัด memory และ performance

เทคนิคการจัดการ Immutable อย่างมีประสิทธิภาพ

  • ใช้ library ช่วย เช่น immer.js สำหรับ JavaScript
  • ใช้ copy-on-write แทนการ clone ทั้ง object
import produce from 'immer';

const nextState = produce(state, draft => {
  draft.user.name = 'NewName';
});

สรุป

ความเข้าใจเรื่อง Immutable vs Mutable คือพื้นฐานที่สำคัญในการออกแบบซอฟต์แวร์ที่ปลอดภัย มีประสิทธิภาพ และง่ายต่อการดูแล หากคุณใช้มันอย่างถูกต้อง จะช่วยลด bug และเพิ่มความน่าเชื่อถือของระบบได้อย่างมาก ✨

บทความนี้ใช้เวลาอ่าน 10 – 15 นาที เขียนโดยทีมงาน poolsawat.com

Leave a Reply

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *