Interface ใน Go

ก่อนจะไปพูดถึงเรือง interface เรามาดูก่อนว่าถ้าผมต้องการเขียนโปรแกรมให้นับเลขตามลำดับใน index ของ array ว่าถ้า index นั้นสามารถหารลงตัวด้วย 3 ให้นับ Fizz แต่ถ้าหารด้วย 5 ลงตัวให้นับ Buzz เราก็สามารถเขียนโปรแกรมง่ายๆได้ดังนี้ (ลองใน Go Playfround)

ไอ้โปรแกรมนี้มันก็ทำงานได้ตามสิ่งที่มันควรจะเป็นแหละแต่!!! เราดันไม่ชอบ primitive data type เพราะมันไม่ค่อยยืดหยุ่นเราอยากจะใช้อะไรที่มันดูดีกว่านี้ซึ่งใน Go เราหลีกไม่ได้ที่จะใช้ Struct แต่!!! ถ้าเราสร้าง Struct ขึ้นมา 3 ประเภทชื่อ Number, Fizz, Buzz เราจะสร้าง Array ยังไงครับ???? เพราะของที่ถูกเก็บฝน Array นั้นจะต้องเป็น Data Type เดียวกัน “ทำไงดี”….ลองนึกไปถึงความสามารถหนึ่งของภาษาที่ได้รับความนิยมมากอย่าง Java คือการกำหนด Abstraction ของข้อมูลและรายละเอียดของการทำงานซึ่งปกติเราจะใช้สิ่งที่เรียกว่า Interface การใช้งาน Interface จะทำให้เราเอาของที่เป็นของต่างประเภทกันมาห่อด้วย “Interface” แล้วเราสามารถมองเห็นมันเป็นของชนิดเดียวกันได้ ดังนั้นในที่นี้เราจึงสามารถสร้าง Inteface ขึ้นมาเพื่อห่อของที่เราต้องการชื่อ Counter ที่มาความสามารถในการ Count เข้ามาช่วยเรา

และเรากำหนดว่าเราอยากได้ของที่มีความสามารถในการนับสามประเภทคือ Number, Fizz และ Buzz

ใน Go เราไม่ต้องประกาศ implements เหมือนใน Java ในการบอกว่าเรา implement interface ตัวไหนแต่สิ่งที่เราทำคือการเขียนสร้าง Method ที่เหมือนกับ Method ที่เราประกาศไว้ใน Interface ดังนั้นตัวอย่างของเรา Struct ทั้งสามตัวของเราคือ Number, Fizz และ Buzz ต่างมี Method ชื่อ Count() ดังนั้นเราเลยสามารถจับมันทั้งสามตัวใส่ไว้ใน Array ของ Counter ได้เลยลองมาดูตอนทำงานกัน ลองใน Go Playground

One response

Comments are closed.