Functional Programming Camp

วันเสาร์เพื่อนเลื่อนนัด เลยตัดสินใจไป Functional Programming Camp แทน(จริงๆ มีสอบอังกฤษ แต่โดดไป ^^!) ไปถึงประมาณสิบโมง หลงทาง(ในหมู่บ้าน) อีกครึ่งชั่วโมง กว่าจะไปถึงจริงๆ ก็ประมาณสิบโมงครึ่งนั่งเล่น นั่งคุย แล้วเริ่มกันจริงๆ ก็สิบเอ็ดโมงกว่า แต่จากนั้น เนื้อหาที่ตามมาเรียกว่าหนักหัวมาก กว่าจะย่อยได้หมดเรียกว่าเมาสัญลักษณ์ไปเลย

เริ่มจาก Functional Programming คืออะไร คำตอบจากพี่ @pphetra บอกว่ามันคือรูปแบบในการเขียนโปรแกรม โดยรูปแบบที่ว่ามีลักษณะคือ

  1. Immutable ข้อมูลต่างๆ เมื่อประกาศมาแล้วจะไม่มีการเปลี่ยนแปลง หรือเทียบเท่ากับ function ที่ไม่รับตัวแปรอะไรเลยแล้วให้ผลลัพธ์กลับมา เช่น var a = 5 ก็จะเหมือนกับประกาศว่า function a() = 5
  2. Recursion การทำซ้ำต่างๆ ในรูปแบบการเขียนโปรแกรมอื่น จะใช้รูปแบบการวนซ้ำเช่น for, while แต่เนื่องจาก ตัวแปรไม่สามารถเปลี่ยนแปลงได้ การวนซ้ำแบบนั้นจึงทำไม่ได้ การทำซ้ำต่างๆ ใน functional programming จึงอยู่ในรูปแบบเรียกตัวเองซ้ำ (นอกจากนี้ในงานมีการพูดถึงเทคนิคต่างๆ เช่น continuos passing style, tail recursion, … อีกพอสมควร เรียกว่าช่วงเช้าหนักหัวเพราะคำศัพท์นี่แหละ =_=)
  3. First class function คือ function ที่มีลักษณะเหมือนตัวแปรในภาษาอื่น คือสามารถเปลี่ยนแปลงการทำงานของ function ได้ โดยใช้ชื่อเดิม เช่น
    var a = function(x,y) { alert(x+y) }
    a = function(x) { alert(x*x) }
    
  4. Higher order function เนื่องจาก function นั้นมีความสามารถเหมือนตัวแปรแล้ว มันจึงส่งเข้าไปใน function อื่น หรือ return จาก function อื่นได้ โดยถ้า มันรับจาก function อื่นซ้อนๆ กันหรือคืนค่าจาก function อื่นซ้อนๆกัน ลำดับของมันก็สูงขึ้นตามจำนวนที่ซ้อนเรียกลงไป เช่น
    (A,_,B) = (1,2,3)
    A=1
    B=3
    
  5. non-strict evaluation คือการทำงานกับข้อมูลที่ต้องใช้เท่านั้นเช่นๆ ถ้าหากมี List ขนาด 10 ฃ่อง แล้วเราต้องการหาว่า ในช่องแรกเก็บค่าอะไร เราก็แค่ดูที่ช่องแรก โดยไม่ต้องดูสิบช่องที่เหลือว่าถูกหรือผิด
  6. lambda function … อื่ม ยังเป็นสิ่งที่คาใจผมอยู่ว่ามันคืออะไร เพราะเข้ามาดูอีกทีก็ตัวอย่างแล้ว

เอาหละหมดช่วงเช้าด้วยนิยามหนักๆ แล้ว ตอนบ่ายพักกินข้าว ต่อด้วยลองเขียนเล่นจริงโดย @iporsut ปิดท้ายด้วย เหตุผลต่างๆ ว่าทำไม Functional Programming จึงพูดถึงกันตอนนี้ (ทั้งๆ ที่มันก็มานานพอสมควรแล้ว) สรุปเป็นข้อๆ คือ

  1. เนื่องจาก CPU มันไม่เพิ่มประสิทธิภาพเท่าไหร่แล้ว แบ่งเหัวแยกออกมาแทน การที่จะใช้พื้นที่ร่วมกัน ก็จะใช้ประสิทธิภาพได้ไม่เต็มที่ จึงเอา Functional Programming มาช่วยเพื่อลดผลข้างเคียงจากการเปลี่ยนแปลงข้อมูลของตัวแปรต่างๆ (เพราะกันไม่ให้มันเปลี่ยนเลย -*-)
  2. จะหัดเขียน อยากเข้าใจง่ายๆ ก็จงเริ่มจาก Haskell ซะ แต่ถ้ามันลำบากไป ก็จะเริ่มจากลูกครึ่งอย่าง Scala ก็ได้แต่อาจจะเข้าใจช้ากว่า เพราะอาจเผลอไปเขียนรูปแบบเดิมๆ ได้
  3. ปัจจุบันยังไม่มีใครใช้เอามาเขียนเป็นโปรแกรมในระบบใหญ่ๆ ทั่วไป จะเห็นส่วนมากก็ใน AI หรือข่ายวิชาเฉพาะทางต่างๆ ซะมากกว่า

คราวถัดไป นัดกันอีกประมาณเดือนหรือสองเดือน เรื่องที่จะคุยกันคือ NoSQL แต่ก่อนเจอทุกวัน​(Berkley DB) ปัจจุบันเจอแต่ Flex เลยโม้ไม่ได้ ให้ @visibletrap ที่กำลังหมกมุ่นอยู่ไปโม้แทนแน่นอน แต่จะได้ไปหรือป่าวนั้นอีกเรื่องนึงแฮะ

About llun

Just a programmer

  • http://twitter.com/neizod Nattawut Phetmak

    อ่านครั้งแรก (หลายเดือนก่อน) โครตมึน มาอ่านวันนี้พอเข้าใจขึ้นมาหน่อยๆ แล้วครับ m(_ _)m ()

  • http://www.aruj.org อรุช

    Functional Programming เป็นอะไรที่กินพลังสมองผมเกินไปครับ สมัยเรียนแค่ Haskell กว่าจะเขียนอะไรได้อย่างนึงก็คิดนานมากแล้ว – -