# การใช้งาน set and get function และคอนเซ็ปต์ OOP ในภาษา Haskell อย่างง่าย
Haskell เป็นภาษาโปรแกรมที่มีมูลค่าในด้านการสร้างโปรแกรมที่มีโครงสร้างที่แน่นอน ประสิทธิภาพสูง และลดความซับซ้อนในการทำงานแบบคืบคลาน คอนเซ็ปต์ Object-Oriented Programming (OOP) บนภาษา Haskell จะมีลักษณะเฉพาะที่แตกต่างจากภาษาอื่นๆ เพราะ Haskell เน้นการใช้งานฟังก์ชันแทนการใช้งาน object เป็นหลัก
แต่ถึงแม้ Haskell จะเป็นภาษาที่เน้น Functional Programming ก็สามารถเรียกใช้แนวคิดของ OOP ได้ด้วยการใช้ Type classes และ Record Syntax ในการสร้าง set และ get function ซึ่งเป็นฟังก์ชันสำหรับกำหนดและเข้าถึงค่าของข้อมูล ตามแบบฉบับของการเขียนโปรแกรมแบบ OOP
ตัวอย่างที่ 1: การเขียน Record Syntax และสร้าง get function
-- กำหนด type Person โดยใช้ Record Syntax
data Person = Person { name :: String, age :: Int } deriving (Show)
-- สร้าง function เพื่อเข้าถึงข้อมูล
getName :: Person -> String
getName person = name person
getAge :: Person -> Int
getAge person = age person
main = do
let person = Person "Bob" 30
print (getName person) -- แสดง "Bob"
print (getAge person) -- แสดง 30
ในตัวอย่างนี้, `Person` ถูกสร้างขึ้นมาโดยใช้ Record Syntax ซึ่งทำให้ Haskell สร้าง get function เช่น `name` และ `age` ให้โดยอัตโนมัติ จากนั้นเราก็สามารถเขียน function `getName` และ `getAge` เพื่อใช้เข้าถึงข้อมูลได้
ตัวอย่างที่ 2: การสร้าง set function
-- การเปลี่ยนแปลงค่าโดยใช้ Record Update
setName :: String -> Person -> Person
setName newName person = person { name = newName }
setAge :: Int -> Person -> Person
setAge newAge person = person { age = newAge }
main = do
let person = Person "Alice" 25
let personWithNameChanged = setName "Alicia" person
print (getName personWithNameChanged) -- แสดง "Alicia"
จากตัวอย่างเราเห็นวิธีการใช้ record update syntax เพื่อทำการเปลี่ยนแปลงค่าของ field ใน record ใน Haskell ไม่มี mutable state ดังนั้นการ 'set' ค่าในภาษา Haskell จริงๆ แล้วคือการสร้างสำเนาของ record ใหม่ที่มี field ถูกเปลี่ยนแปลงค่าไปแล้ว
ตัวอย่างที่ 3: การใช้ Type classes เพื่อสร้าง abstraction
-- การนิยาม type class สำหรับการสร้าง abstraction
class Nameable n where
getName :: n -> String
instance Nameable Person where
getName = name
-- ตอนนี้เราสามารถใช้ getName กับ type ใดก็ได้ที่เป็น instance ของ Nameable
printName :: Nameable n => n -> IO ()
printName = putStrLn . getName
main = do
let person = Person "Eve" 42
printName person -- แสดงให้เห็น "Eve"
ในตัวอย่างนี้เราใช้ `Type class` จาก Haskell เพื่อสร้างชนิดของ abstraction เหมือนกับ interface ในโอบเจกต์ ออเรียนเทด และเราจึงสามารถที่จะกำหนด behavior ทั่วๆ ไปของการ 'getName' ได้โดยที่ไม่ต้องกำหนดว่าต้องเป็น `Person` ต่อไป
ในการพัฒนาซอฟต์แวร์ Haskell ได้นำ set และ get function จาก OOP มาใช้ในการแยกส่วนของ encapsulation และ abstraction เพื่อรักษาหลักการของการโปรแกรมที่โปร่งใสและการป้องกันการเปลี่ยนแปลงข้อมูลที่ไม่คาดฝัน เช่น:
- ใช้ในการจัดการสถานะของ software widgets ใน User Interface โดยเราไม่ต้องเปลี่ยนแปลงโค้ดทั้งหมดเมื่อมีการเปลี่ยนสถานะของรายการ
- สร้าง base classes สำหรับการจัดการกับ database entities โดยรักษา state และ behavior ของ entity ให้มี consistency
การเขียนโปรแกรมไม่ได้อยู่เพียงแค่ภาษาที่คุณเลือกใช้ แต่ยังอยู่ที่วิธีที่คุณนำความรู้ทางการเขียนโปรแกรมไปสร้างสรรค์และแก้ไขปัญหา ต่อให้คุณกำลังใช้ Haskell หรือภาษาใดก็ตามการเข้าใจและการใช้ OOP concept อย่างถูกต้องจะช่วยให้คุณก้าวไปอีกขั้นในการเป็นนักพัฒนาซอฟต์แวร์ที่โดดเด่น
ที่ Expert-Programming-Tutor (EPT), เรามุ่งมั่นที่จะศึกษาและแบ่งปันวิสdom ทางการเขียนโปรแกรมให้กับคุณ ไม่ว่าคุณจะเป็นมือใหม่หรือผู้มีประสบการณ์ที่ต้องการพัฒนาทักษะการเขียนโปรแกรมของตนเอง เรามีหลักสูตรและเครื่องมือที่คุณต้องการในการเรียนรู้การเขียนโปรแกรมที่หลากหลายและเป็นปัจจุบัน
เข้าร่วมกับเราที่ EPT และเริ่มต้นการเดินทางของคุณในโลกแห่งการเขียนโปรแกรมได้ตั้งแต่วันนี้!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM