วันเสาร์เพื่อนเลื่อนนัด เลยตัดสินใจไป Functional Programming Camp แทน(จริงๆ มีสอบอังกฤษ แต่โดดไป ^^!) ไปถึงประมาณสิบโมง หลงทาง(ในหมู่บ้าน) อีกครึ่งชั่วโมง กว่าจะไปถึงจริงๆ ก็ประมาณสิบโมงครึ่งนั่งเล่น นั่งคุย แล้วเริ่มกันจริงๆ ก็สิบเอ็ดโมงกว่า แต่จากนั้น เนื้อหาที่ตามมาเรียกว่าหนักหัวมาก กว่าจะย่อยได้หมดเรียกว่าเมาสัญลักษณ์ไปเลย
เริ่มจาก Functional Programming คืออะไร คำตอบจากพี่ @pphetra บอกว่ามันคือรูปแบบในการเขียนโปรแกรม โดยรูปแบบที่ว่ามีลักษณะคือ
- Immutable ข้อมูลต่างๆ เมื่อประกาศมาแล้วจะไม่มีการเปลี่ยนแปลง หรือเทียบเท่ากับ function ที่ไม่รับตัวแปรอะไรเลยแล้วให้ผลลัพธ์กลับมา เช่น var a = 5 ก็จะเหมือนกับประกาศว่า function a() = 5
- Recursion การทำซ้ำต่างๆ ในรูปแบบการเขียนโปรแกรมอื่น จะใช้รูปแบบการวนซ้ำเช่น for, while แต่เนื่องจาก ตัวแปรไม่สามารถเปลี่ยนแปลงได้ การวนซ้ำแบบนั้นจึงทำไม่ได้ การทำซ้ำต่างๆ ใน functional programming จึงอยู่ในรูปแบบเรียกตัวเองซ้ำ (นอกจากนี้ในงานมีการพูดถึงเทคนิคต่างๆ เช่น continuos passing style, tail recursion, … อีกพอสมควร เรียกว่าช่วงเช้าหนักหัวเพราะคำศัพท์นี่แหละ =_=)
- First class function คือ function ที่มีลักษณะเหมือนตัวแปรในภาษาอื่น คือสามารถเปลี่ยนแปลงการทำงานของ function ได้ โดยใช้ชื่อเดิม เช่น
var a = function(x,y) { alert(x+y) } a = function(x) { alert(x*x) }
- Higher order function เนื่องจาก function นั้นมีความสามารถเหมือนตัวแปรแล้ว มันจึงส่งเข้าไปใน function อื่น หรือ return จาก function อื่นได้ โดยถ้า มันรับจาก function อื่นซ้อนๆ กันหรือคืนค่าจาก function อื่นซ้อนๆกัน ลำดับของมันก็สูงขึ้นตามจำนวนที่ซ้อนเรียกลงไป เช่น
(A,_,B) = (1,2,3) A=1 B=3
- non-strict evaluation คือการทำงานกับข้อมูลที่ต้องใช้เท่านั้นเช่นๆ ถ้าหากมี List ขนาด 10 ฃ่อง แล้วเราต้องการหาว่า ในช่องแรกเก็บค่าอะไร เราก็แค่ดูที่ช่องแรก โดยไม่ต้องดูสิบช่องที่เหลือว่าถูกหรือผิด
- lambda function … อื่ม ยังเป็นสิ่งที่คาใจผมอยู่ว่ามันคืออะไร เพราะเข้ามาดูอีกทีก็ตัวอย่างแล้ว
เอาหละหมดช่วงเช้าด้วยนิยามหนักๆ แล้ว ตอนบ่ายพักกินข้าว ต่อด้วยลองเขียนเล่นจริงโดย @iporsut ปิดท้ายด้วย เหตุผลต่างๆ ว่าทำไม Functional Programming จึงพูดถึงกันตอนนี้ (ทั้งๆ ที่มันก็มานานพอสมควรแล้ว) สรุปเป็นข้อๆ คือ
- เนื่องจาก CPU มันไม่เพิ่มประสิทธิภาพเท่าไหร่แล้ว แบ่งเหัวแยกออกมาแทน การที่จะใช้พื้นที่ร่วมกัน ก็จะใช้ประสิทธิภาพได้ไม่เต็มที่ จึงเอา Functional Programming มาช่วยเพื่อลดผลข้างเคียงจากการเปลี่ยนแปลงข้อมูลของตัวแปรต่างๆ (เพราะกันไม่ให้มันเปลี่ยนเลย -*-)
- จะหัดเขียน อยากเข้าใจง่ายๆ ก็จงเริ่มจาก Haskell ซะ แต่ถ้ามันลำบากไป ก็จะเริ่มจากลูกครึ่งอย่าง Scala ก็ได้แต่อาจจะเข้าใจช้ากว่า เพราะอาจเผลอไปเขียนรูปแบบเดิมๆ ได้
- ปัจจุบันยังไม่มีใครใช้เอามาเขียนเป็นโปรแกรมในระบบใหญ่ๆ ทั่วไป จะเห็นส่วนมากก็ใน AI หรือข่ายวิชาเฉพาะทางต่างๆ ซะมากกว่า
คราวถัดไป นัดกันอีกประมาณเดือนหรือสองเดือน เรื่องที่จะคุยกันคือ NoSQL แต่ก่อนเจอทุกวัน(Berkley DB) ปัจจุบันเจอแต่ Flex เลยโม้ไม่ได้ ให้ @visibletrap ที่กำลังหมกมุ่นอยู่ไปโม้แทนแน่นอน แต่จะได้ไปหรือป่าวนั้นอีกเรื่องนึงแฮะ