ในการพัฒนาโปรแกรมเชิงวัตถุ (Object-Oriented Programming หรือ OOP) หนึ่งในภาษาโปรแกรมที่กำลังได้รับความนิยมและถูกใช้งานอย่างแพร่หลายคือภาษา Go (หรือ Golang) ภาษา Go ได้รับการออกแบบโดย Google เพื่อเพิ่มประสิทธิภาพของการเขียนโปรแกรมให้มีความง่ายขึ้นและเพิ่มประสิทธิภาพในการทำงาน ในขณะที่หลายคนอาจจะคุ้นเคยกับ OOP ในภาษาอย่าง Java หรือ Python ภาษา Go นั้นมีการจัดการแนวคิดเชิงวัตถุในแบบที่เรียบง่ายแต่น่าสนใจอย่างยิ่ง
ในภาษา Go เราจะไม่มีคำว่า "class" แต่จะใช้ `struct` แทนสำหรับการกำหนดประเภทข้อมูลที่รวมกัน พร้อมเพิ่มความสามารถเชิงวัตถุด้วยการผูก `method` เข้ากับ `struct` โดย `method` นี้จะทำหน้าที่เป็นพฤติกรรมของโครงสร้างข้อมูลนั้นๆ
Struct
โครงสร้างของ `struct` ในภาษา Go คือการกำหนดชนิดข้อมูลใหม่ที่มีชุดของฟิลด์ (fields) โดยมีรูปแบบการสร้างดังนี้:
type Person struct {
Name string
Age int
}
ด้านบนเราสร้าง struct ที่ชื่อว่า `Person` ซึ่งมีฟิลด์สองฟิลด์คือ `Name` ที่มีประเภทข้อมูลเป็น string และ `Age` ที่เป็น int
Method
ในภาษา Go เราสามารถกำหนด `method` ที่ทำงานร่วมกับ `struct` ได้ วิธีที่ทำให้ `struct` มีพฤติกรรมคล้ายคลึงคลาสใน OOP
การกำหนด method จะมีรูปแบบดังนี้:
func (p Person) Greet() string {
return "Hello, my name is " + p.Name
}
ในที่นี้เราได้สร้าง method ที่ชื่อว่า `Greet` สำหรับ struct `Person` โดยที่ (`p Person`) คือ receiver ของ method ซึ่งทำหน้าที่คล้าย "self" ใน Python หรือ "this" ใน Java
สมมติว่าเรามีแอปพลิเคชันสำหรับจัดการข้อมูลบุคคล เราสามารถใช้ struct และ method เพื่อจัดการกับข้อมูลดังนี้:
package main
import (
"fmt"
)
type Person struct {
Name string
Age int
}
func (p Person) Greet() string {
return "Hello, my name is " + p.Name
}
func (p Person) HaveBirthday() {
p.Age++
fmt.Println(p.Name, "is now", p.Age, "years old")
}
func main() {
john := Person{"John Doe", 30}
fmt.Println(john.Greet())
john.HaveBirthday()
}
จากตัวอย่างข้างต้น `john` เป็น instance ของ `Person` ที่มีชื่อว่า 'John Doe' และอายุ 30 ปี เมื่อเราเรียกใช้ `Greet()` จะได้รับการทักทายที่รวมชื่อเข้าด้วยกัน และเมื่อเรียกใช้ `HaveBirthday()` จะเพิ่มอายุของบุคคลนั้นอีกหนึ่งปี
ข้อสังเกตสำคัญคือ method `HaveBirthday()` ด้านบนนั้นไม่ได้แก้ไขค่าของ age ที่เก็บไว้อย่างแท้จริง นั่นเพราะว่าใน Go ค่าต่างๆ ถูกส่งผ่านโดยค่า (pass by value) ดังนั้น receiver ควรจะถูกกำหนดให้เป็น pointer เพื่อให้การแก้ไขมีผลถาวร:
func (p *Person) HaveBirthday() {
p.Age++
fmt.Println(p.Name, "is now", p.Age, "years old")
}
การศึกษา OOP ใน Go สามารถนำไปสู่ประสิทธิภาพในการพัฒนาโปรแกรมที่ยอดเยี่ยมและรู้ลึกถึงการจัดการข้อมูลด้วย `struct` และ method ซึ่งถือว่าเป็นพื้นฐานที่แข็งแกร่งสำหรับผู้ที่ต้องการต่อยอดไปยังการเขียนโปรแกรมที่มีความซับซ้อนมากยิ่งขึ้น
เรียนรู้เพิ่มเติมเกี่ยวกับการเขียนโปรแกรมและภาษา Go ด้วยหลักสูตรที่มีความลึกซึ้งและเป็นประโยชน์ที่โรงเรียน Expert-Programming-Tutor (EPT) สนใจสามารถเข้ามาสำรวจและท้าทายตนเองในสนามการเขียนโปรแกรมที่นี่!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากเจอข้อผิดพลาด หรือต้องการพูดคุย ติดต่อได้ที่ https://m.me/expert.Programming.Tutor/
Tag ที่น่าสนใจ: java c# vb.net python c c++ machine_learning web database oop cloud aws ios android
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM