ตามแนวคิดทั่วไปผมเห็นด้วยเลยครับว่า immutable data จำเป็นต่อการเขียนโปรแกรมแบบ functional มากๆ
แต่ในตัวอย่างในโพสนี้ เราสามารถเขียนโปรแกรมด้วยแนวคิด functional ในภาษาที่ไม่ต้องมี immutable data จาก runtime ก็ได้ อย่างเช่นใช้ map ของ Ruby หรือ JavaScript อะครับ การที่เราต้องเขียนโค้ด Go ออกมาแบบนั้น มันไม่ใช่เพราะ Go ไม่มี immutable data จาก runtime อะครับ
เห็นด้วยว่าไม่ต้องมี 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 ของใหม่
Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink.
Hide child comments as well
Confirm
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
ตามแนวคิดทั่วไปผมเห็นด้วยเลยครับว่า immutable data จำเป็นต่อการเขียนโปรแกรมแบบ functional มากๆ
แต่ในตัวอย่างในโพสนี้ เราสามารถเขียนโปรแกรมด้วยแนวคิด functional ในภาษาที่ไม่ต้องมี immutable data จาก runtime ก็ได้ อย่างเช่นใช้ map ของ Ruby หรือ JavaScript อะครับ การที่เราต้องเขียนโค้ด Go ออกมาแบบนั้น มันไม่ใช่เพราะ Go ไม่มี immutable data จาก runtime อะครับ
เห็นด้วยว่าไม่ต้องมี 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 ของใหม่