ต่อเนื่องจากบทความที่แล้ว ผมได้เขียนเรื่อง สิ่งสำคัญของผู้ที่เริ่มหัดเรียนเขียนโปรแกรมด้วยภาษา golang จำเป็นต้องรู้และต้องทำ | หลักสูตรเรียนลัด และสัญญาไว้ว่าถ้ามีเวลาเดี๋ยวจะมาเขียนภาคต่อของ golang ก่อนที่เราจะไปที่วิธีการทำ ลองมาทำความเข้ามใจง่าย ๆ เกี่ยวกับการใช้งาน method chaining กันเสียก่อน
method chaining แปลตามตัวคือ method ชื่อ ฟังก์ชันหรือหน้าที่ทำงานอย่างใดอย่างหนึ่งหรือหลาย ๆ อย่างแล้วแต่การออกแบบ ส่วน chaining แปลตรงตัวคือ "โซ่" ในส่วนของการทำงานของ method จะทำงานเชื่อมโยงกันไปเหมือนโซ่นั้นเอง ตัวอย่างเช่น functionA()->functionB()->functionC().... ไปเรื่อย ๆ ข้อดีข้อมันคือมันทำให้ code กระซับขึ้นไม่ต้อง new object ขึ้นมาใหม่ทำให้ลดจำนวนบรรทัดไปได้เยอะเลยทีเดียว ส่วนข้อเสีย ในบางภาษาเช่น php มันไม่สามารถทำการ Jump to function ที่ไม่ใช่ลำดับแรกได้ ใน editor บางตัว อาจจะลำบากหน่อยในช่วงเวลา implement code
สำหรับ developer สายงาน nodejs คงคุ้นเคยกันดีอยู่แล้วในการใช้งานคุณสมบัติข้อนี้ของภาษาโปรแกรม ส่วนตัวผมคิดว่า javascript นี่เป็นภาษาที่สุดยอดของการใช้งาน method chaining เลยก็ว่าได้ สังเกตุจากหลาย ๆบทความที่ผมได้อ่านมามีการพูดถึงและมีตัวอย่างเป็นจำนวนมาก
เอาละเมื่อเข้าใจกันแล้วว่ามันคืออะไร เราลองมาทำกันดีกว่า ตัวอย่างที่ผมทำขึ้นมานี้ จะเป็นการสร้าง method chaining แบบง่าย ๆ โดยผมจะสร้างไพล์ขึ้น 1 ไฟล์ซึ่งประกอบไปด้วย 2 fuction ที่สามารถ chaining กันได้ คือ function setMessage และ function setCode โดย setMessage ทำหน้าที่ รับข้อมูลในรูปแบบสติงแล้วมาเก็บไว้ที่ config -> key -> message ส่วนของ setCode ทำหน้าที่รับข้อมูลในรูปแบบตัวเลขแล้วมาเก็บไว้ที่ config -> key-> code
ในส่วนของการใช้งานก็ง่ายมาก keyword ของกระบวนการนี้มีอยู่สองอย่างคือ
- การคือค่าจาก function ให้เป็น type เดิมที่รับเข้ามาสังเกตในวงเล็บแรกที่ implement struct ของ config มา และตรง repsonse ก็คืนค่า struct ของ config กลับไป
- การเรียกใช้งาน มีความจำเป็นต้อง new struct ของ config นั้นขึ้นมาเสียก่อน แล้วเก็บไว้ในตัวแปรจากนั้นก็ สามารถเรียกใช้ method chaining ผ่านทางตัวแปรนั้นได้เลย
ตัวอย่าง code มีดังต่อไปนี้
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import "fmt" | |
type config struct { | |
code int | |
message string | |
} | |
// implement config | |
// argument message string | |
// response config struct | |
func (c *config) setMessage(message string) *config { | |
c.message = message | |
return c | |
} | |
// implement config | |
// argument code integer | |
// response config struct | |
func (c *config) setCode(code int) *config { | |
c.code = code | |
println(`b`) | |
return c | |
} | |
func main() { | |
// new config struct | |
a := new(config) | |
a.setCode(200).setMessage(`success`) | |
fmt.Printf(`%v`, a) | |
} |
สำหรับบทความนี้ผมขอจบไว้เพียงเท่านี้ก่อน หากมีคำถามหรือข้อสงสัยเพิ่มเติมสามารถเขียนความคิดเห็นได้ด้านล่างนี้ครับ ถ้ามีเวลาผมจะเขียนบทถัดไปตามที่ได้สัญญาไว้ฝากติดตามกันด้วยนะครับ
0 ความคิดเห็น:
แสดงความคิดเห็น