FRP โลกใหม่ของเหล่าโปรแกรมเมอร์

FRP (Functional reactive programming) อันนี้ดูเป็นศัพท์ใหม่สำหรับ Developer บางคน แต่ถ้าใครที่เขียน React แล้วเขียนตามแนว Reflux หรือ Redux อันนั้นแหละครับที่ผมอยากบอกว่ามันคือ FRP Style นั้นแหละ

แนวคิดของ FRP เป็นแนวคิดการเขียนโปรแกรมซึ่งทำตามโดนยึดแนวคิดของการพัฒนาอิงถึงข้อมูลดิบภายในโปรแกรม บ้างก็เรียกว่า Dataflow programming หรือบ้างก็เรียก Event-driven programming บ้างก็เรียกว่า Data-driven programming มันดูแล้วมีหลายชื่อนะครับ แต่จริงๆ ใจความมันดูไม่่ต่างกันเลย

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

ต้องบอกก่อนว่าในยุคสมัยก่อน การพัฒนาโปรแกรมจะอิงแนวคิดเรื่องการทำ Encapsulation หรือห่อหุ้ม เป้าหมายเพื่อป้องกันโปรแกรมจากการกระทำภายนอก ไม่ว่าจะการแทรกแซงอะไรก็ตาม แต่ปัญหามันเกิดขึ้นว่าโปรแกรมนั้นไม่ยืนหยุนพอ อาจจะไม่สามารถขยาย feature ได้ หรือ scale out ตัวระบบไม่ได้ เพราะมันผูกติดเป็นก้อนเดียวกันมากเกินไป

ทีนี้ปกติในระดับโค้ด สมัยนี้หลายคนเริ่มจะเขียน OOP (Object-oriented programming) ได้เป็นรูปเป็นร่างแล้ว ดังนั้น ทำไมเราถึงไม่เอาแนวคิด OOP มาทำกับโปรแกรมทั้งก้อนล่ะ? มันเลยเกิดเป็นแนวคิด Reactive programming นั้นเองครับ

จริงๆ Reactive programming มีการเขียนมานานแล้ว ยกตัวอย่างระบบเทรดหุ้นคือตัวอย่างที่ดี โดยระบบตลาดจะถูกพัฒนาแยกส่วนกันทั้งหมด ซึ่งเป้าหมายจริงๆ คือเขาต้องการทำให้ระบบเป็นอิสระต่อกัน พัฒนาขนานกันได้ และยังสามารถตรวจสอบแยกกันได้อิสระ

ระบบคำสั่งซื้อ
– เช็คยอดเงินใน balance ถ้ามีไม่พอให้ปฏิเสษ
– ถ้ามีคำสั่งซื้อหุ้นน้อยกว่า 100 ให้เข้าสู่ระบบซื้อเศษหุ้น
– ถ้าคำสั่งซื้อมากกว่า 100 ให้เข้าสู่ระบบซื้อหุ้นแบบ lot
– คำสั่งซื้อทั้งหมดจะถูกส่งแยกไปยังระบบกระดานซื้อขยาย
– หลังส่งคำสั่งซื้อเสร็จให้ส่งคำสั่งไปบอกระบบบันทึก activity

ระบบกระดานซื้อขยาย
– ถ้าได้รับคำสั่งซื้อให้ตรวจสอบว่าประเภทกระดาษตรงกับประเภทหุ้นที่จะสั่งซื้อหรือไม่ (หุ้น lot หรือเศษหุ้น)
– เมื่อได้รับคำสั่งให้เอาลง queue
– ให้ระบบตั้งรอตัว matcher มาทำงานอีกที

อันนี้แต่ยกตัวอย่างเบื้องต้นครับ แต่ที่อยากชี้คือสองระบบข้างต้นนี้ต้องเป็นโปรแกรมคนล่ะก้อนกันเลย แล้วทำงานบนล่ะเครื่องไปเลย ดังนั้น ถ้ามีบั๊กก็จะเห็นเป็นจุดๆ การแก้ไขก็ไม่ต้องกังวลว่าจะไปทำ feature อื่นพัง สามารถ launch new feature ได้โดยไม่ต้องมาปวดหัวว่าจะกระทบอะไร

เพราะจุดสำคัญอยู่ data flow ที่ไหลระหว่างสองระบบนี้ ต้องมีการตกลงกันแต่แรกว่าจะส่งคุยรับแค่ไหน สามารถส่งเพิ่มได้แต่ห้ามเอาออก เท่านี้ระบบก็จะเรียกว่าพัฒนาแยกกันได้อิสระ และนี้คือแนวคิดใหม่ของโปรแกรมเมอร์ครับ

Leave a Reply