DEV Community

Discussion on: เปรียบเทียบการจัดการข้อมูลของ ภาษาแบบ Functional อย่าง Elixir ด้วย Immutable Data กับ Go ที่เป็น Mutable Data

 
visibletrap profile image
Nuttanart Pornprasitsakul

ตามแนวคิดทั่วไปผมเห็นด้วยเลยครับว่า immutable data จำเป็นต่อการเขียนโปรแกรมแบบ functional มากๆ

แต่ในตัวอย่างในโพสนี้ เราสามารถเขียนโปรแกรมด้วยแนวคิด functional ในภาษาที่ไม่ต้องมี immutable data จาก runtime ก็ได้ อย่างเช่นใช้ map ของ Ruby หรือ JavaScript อะครับ การที่เราต้องเขียนโค้ด Go ออกมาแบบนั้น มันไม่ใช่เพราะ Go ไม่มี immutable data จาก runtime อะครับ

Thread Thread
 
iporsut profile image
Weerasak Chongnguluam

เห็นด้วยว่าไม่ต้องมี immutable data หรือ persistent data structure มาให้เอง ก็เขียนได้ อันนี้ผมก็ไม่ได้ติดอะไรครับ แต่นั่นก็คือทำให้มีภาระต้องทำเองเช่นของ Go ต้อง copy slice ทั้งก้อนเองก่อนแก้ไขแล้วค่อย return ก้อนใหม่กลับออกไป คือไม่ต้องมีระดับ runtime ก็ได้ครับ ขอแค่มีตัวช่วยเรื่อง immutable ซึ่ง library ของ Ruby และ JavaScript นั้นมี เคส Ruby มีใน standard library พวก Enum ที่มี method ให้ทั้งแบบ return ค่าใหม่ และแบบ mutate จากตัวแปรเดิม ส่วนของ Javascript นั้นมีทั้งแบบสร้างภาษาใหม่แล้วแปลงเป็น Javascript หรือสร้าง Immutable library ขึ้นมาจัดการ persistent data structure ให้อีกรอบนึงโดยที่ไม่ต้องพึ่ง runtime

สรุปคือไม่ว่าจะมีการจัดการ immutable ให้ผ่าน runtime หรือ library ถ้ามีมาให้ก็ช่วยให้เขียนได้ง่ายกว่าไม่มีครับ กับ Go ก็ทำได้แต่แค่มันไม่ง่ายต้องนั่ง copy เองก่อนตอนนี้น่ะครับถ้าอยากได้แบบส่ง slice มา ไม่แก้ไขมันแล้ว return ของใหม่