# ความสารเสมือนในโลกโปรแกรมมิ่ง: พลังของ Polymorphism ใน Swift
ในโลกการเขียนโปรแกรมที่มีการพัฒนาอย่างไม่หยุดยั้ง เทคนิคการเขียนโค้ดที่หลากหลายเปรียบเสมือนดินปั้นที่ให้เราสร้างสรรค์สิ่งใหม่ได้ไม่จำกัด หนึ่งในเทคนิคนั้นคือการใช้งาน "Polymorphism" ซึ่งเป็นหัวใจสำคัญของ Object-Oriented Programming (OOP). วันนี้ เราจะมาดูกันว่าเทคนิคนี้ถูกใช้งานในภาษา Swift อย่างไร รวมถึงตัวอย่างโค้ดที่จะช่วยให้คุณเข้าใจมันได้ง่ายขึ้น พร้อมทั้งเชิญชวนให้คุณได้มาศึกษาต่อที่ EPT ซึ่งเราพร้อมจะแนะนำทุกคนเข้าสู่โลกการเขียนโค้ดแบบมืออาชีพ!
คำว่า "Polymorphism" มาจากรากศัพท์กรีกที่แปลว่า "หลายรูปแบบ" ในแนวคิดของการเขียนโปรแกรม หมายถึงความสามารถของออบเจกต์ที่สามารถถูกใช้หรืออ้างอิงในหลายรูปแบบผ่านการสืบทอดหรือส่วนต่อประสาน (interface).
Swift นำเสนอแนวคิดการเขียนโค้ดแบบ OOP ที่ง่ายต่อการเข้าถึง และ polymorphism คือหนึ่งในนั้น ที่ทำให้โค้ดของเรามีความยืดหยุ่นมากขึ้น พิจารณาตัวอย่างด้านล่าง:
ตัวอย่างโค้ดที่ 1: การใช้งาน Polymorphism ในงานพิมพ์
class Printer {
func printDocument() {
print("Printing document...")
}
}
class LaserPrinter: Printer {
override func printDocument() {
print("Printing document with Laser Printer...")
}
}
class InkjetPrinter: Printer {
override func printDocument() {
print("Printing document with Inkjet Printer...")
}
}
func performPrinting(printer: Printer) {
printer.printDocument()
}
let laserPrinter = LaserPrinter()
let inkjetPrinter = InkjetPrinter()
performPrinting(printer: laserPrinter)
performPrinting(printer: inkjetPrinter)
ในตัวอย่างนี้ เราสามารถเห็น polymorphism ที่ทำให้ `performPrinting` function สามารถรับออบเจกต์ประเภทใดก็ได้ที่ถูกสืบทอดมาจากคลาส `Printer` และเรียกใช้ `printDocument` method ได้โดยไม่ว่าจะเป็นประเภทใด.
ตัวอย่างโค้ดที่ 2: การใช้ Protocols เพื่อ Polymorphism
protocol Flyable {
func fly()
}
class Bird: Flyable {
func fly() {
print("The bird flaps its wings and flies.")
}
}
class Airplane: Flyable {
func fly() {
print("The airplane activates its engines and takes off.")
}
}
func makeItFly(thing: Flyable) {
thing.fly()
}
let sparrow = Bird()
let boeing = Airplane()
makeItFly(thing: sparrow)
makeItFly(thing: boeing)
ตัวอย่างนี้แสดงให้เห็นว่า Swift ใช้ `protocol` เพื่อกำหนด contract ที่ classes, structs หรือ enums สามารถ adopt และใช้งานได้ซึ่งจะช่วยให้สามารถสร้าง polymorphism ได้.
ตัวอย่างโค้ดที่ 3: Polymorphism กับ Structs
protocol Drawable {
func draw()
}
struct Circle: Drawable {
func draw() {
print("Drawing a circle.")
}
}
struct Square: Drawable {
func draw() {
print("Drawing a square.")
}
}
func renderShape(shape: Drawable) {
shape.draw()
}
let circle = Circle()
let square = Square()
renderShape(shape: circle)
renderShape(shape: square)
แม้ว่า Swift จะเป็นภาษาที่มีความสามารถในการเขียนโปรแกรมแบบ OOP แต่ structs ซึ่งเป็นประเภทข้อมูลแบบ value type ก็สามารถมีส่วนร่วมใน polymorphism ผ่านทาง protocols ได้เช่นกัน.
ลองคิดถึงแอปพลิเคชันสั่งอาหารออนไลน์ ที่มีหลายวิธีการชำระเงิน เช่น บัตรเครดิต, โมบายแอป หรือ การชำระเมื่อได้รับสินค้า โดยมี interface เรียกว่า `PaymentMethod` ทุกวิธีชำระเงิน implement ไปที่ `PaymentMethod` นี้ โดยไม่ต้องสนใจว่าเป็นแบบไหน โค้ดที่ประมวลผลก็สามารถใช้งานวิธีการชำระเงินใดก็ได้ที่ adopt protocol นั้นโดยใช้ polymorphism นี่จึงเป็นตัวอย่างของการใช้งาน polymorphism ที่สะท้อนถึงสถานการณ์จริงอย่างชัดเจน.
การศึกษาและการใช้งาน polymorphism ในภาษา Swift ไม่เพียงแต่ช่วยให้คุณเขียนโค้ดที่มีความยืดหยุ่นและ reusable แต่ยังช่วยเสริมสร้างไอเดียในการพัฒนาโค้ดของคุณให้ถึงขีดสุด. ที่ EPT, เราขอเชิญชวนคุณมาร่วมเปิดโลกการเรียนรู้ในการเขียนโปรแกรมที่มีคุณภาพ เรามีบทเรียนและคอร์สเข้มข้นรอคุณอยู่ เพื่อให้คุณเรียนรู้ทักษะที่จำเป็นในการเป็นนักพัฒนาแอปพลิเคชันระดับมืออาชีพ. เข้ามาเป็นส่วนหนึ่งของ EPT และค้นพบพลังของ polymorphism ในภาษา Swift ที่จะเปลี่ยนแปลงวิธีที่คุณมองโลกการเขียนโค้ด!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
Tag ที่น่าสนใจ: polymorphism oop swift object-oriented_programming protocols structs inheritance interfaces programming_concepts code_examples real-world_usecases
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM