immutable คืออะไร

พูดสั้นๆ มันก็คล้ายกับ constant ครับ คือตัวแปรที่แก้ค่าไม่ได้ เพียงแต่มันไม่ใช่ const เพราะจริงๆ ในหลายๆ ภาษา มันจะอยู่ในรูป object

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

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

ส่วนถ้ากรณีที่ต้องมีการแก้ไขค่าตัวแปร immutable จริงๆ วิธีที่เป็น common pratice คือการสร้างตัวแปรใหม่ แล้วทิ้งตัวแปรเก่าทิ้ง ซึ่งเราอาจจะใช้การสร้าง collection ของ immutable ทั้งหมดไว้ แล้วตัวไหนที่ถูกทิ้งให้ unset ออกไป แล้วรอให้ GC ของภาษานั้นๆ ไปจัดการเองในภายหลัง

เสร็จแล้วตาม story ตัวอย่างที่ผมพูดถึงห้องพักในระบบจองโรงแรม ถ้าห้องพักต้องมีการเก็บสถานะห้องพักว่า ว่างหรือเต็ม วิธีจัดการคือการจัด group ของ object นั้นแหละ เลยเป็นที่มาของการ map immutable ที่เป็นห้องพัก เข้ากับ array ที่เราสร้างไว้ว่า ว่าง กับ เต็ม

ดังนั้นที่เราต้องทำคือการเอา objectห้องพัก เข้าและออกจาก array สองก้อนเท่านั้น และ memory จะไม่กินเพิ่ม ทำงานไว เพราะ immutable มันมีแค่ reference ต่างกันตัวแปรแบบเดิมๆ mutable ที่ต้องมีการเขียนค่าลงหน่วยความจำใหม่

immutable จึงมีไว้เพื่อการบริหารหน่วยความจำในโปรแกรม และยังเป็นการบริหารตัวแปรด้วย

คุณสมบัติพื้นฐานของ immutable

  • immutable จะอยู่ในรูปแบบ class
  • immutable จะเก็บ attributes ทั้งหมดเป็น private เพื่อป้องกันการแก้ไข
  • immutable จะห้องประกาศ class เป็น final เพื่อป้องกันการ extends
  • immutable จะมี public function ที่มีไว้เพื่อเรียก attributes ที่เก็บไว้ อาจมี interface เพิ่มได้ตามความต้องการ
  • immutable เมื่อมีการต้องแก้ไข ให้แก้ผ่าน method ที่สร้างไว้เฉพาะเคสนั้นๆ โดยต้องคืน new object ตัวใหม่ออกมา และทำการเซ็ต immutable ตัวใหม่ลง collection แล้ว unset ตัวเก่าทิ้ง
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.