เรียนรู้การสร้าง Class และการใช้งานเบื้องต้น (OOP With Swift Part 1)

บทนี้เราจะมาเรียนรู้การสร้าง Class และการใช้งานเบื้องต้น

บทนี้เราจะได้เริ่มต้นในการเขียนโปรแกรมเชิงวัตถุ (Object-Orientied Progamming)  หรือ “OOP”  กันนะครับ ถ้าจะนิยามให้กระชับคือที่เราจะสร้างวัตถุมาซักชิ้นเพื่อมาใช้งานโดยเราจะอ้างอิงจากการโครงร่างหรือพิมพ์เขียวตัวต้นแบบซึ่งเรียกว่า Class และสามารถนำไปดัดแปลงหรือเพิ่มเติมส่วนต่างๆให้ใช้งานง่ายขึ้น

 โดยใน Swift เราจะใช้คำสั่ง “Class” ในการประกาศตัวแปรให้เป็นแบบ OOP หรือเราจะเรียกว่าเป็นวัตถุที่ถูกสร้างมาจากแม่แบบก็ได้

เพื่อให้เข้าใจตรงกัน เวลาเราทำงานกับ Class เราเรียก ตัวแปรข้างในว่า “Property” ส่วน function จะถูกเรียกเป็น “Method”

 

ลองมาดูตัวอย่างง่ายๆกันครับ

เราจะสร้างหุ่นยนต์มาซักตัว เราเลยออกแบบโครงร่างง่ายๆเอาไว้ก่อน เช่นตั้งชื่อให้มัน

ThaiSwiftClass OOP Class 1
ThaiSwiftClass OOP Class Example Code 1

 

วิธีนำ Class ที่ประกาศไปใช้งาน

ThaiSwiftClass OOP Class 1_0
ThaiSwiftClass OOP Class Example

จากตัวอย่าง :  เราประกาศ myNewToy เป็น Class ของ หุ่นยนต์ จากนั้นจึงใช้ Method ชื่อ setName เพื่อตั้งชื่อให้ myNewToy และสั่งพิมพ์ผลออกมา

ThaiSwiftClass OOP Class 1_0 result
ThaiSwiftClass OOP Class ผลที่ได้จากการทำงาน

 

เรายังสามารถใช้คำสั่ง init เพื่อกำหนดค่าเริ่มต้นเมื่อเราสร้างหุ่นยนต์เสร็จแล้วก็ได้

ThaiSwiftClass OOP Class init Example
ThaiSwiftClass OOP Class Init Example

จากตัวอย่าง : เรากำหนด init มา 2 แบบๆแรก รับแค่ sName เฉยๆเพื่อตั้งชื่อให้กับหุ่นยนต์ของเรา

หรือ จะใช้ init แบบที่ 2 ที่เราสั่งให้มันพูดได้ด้วย โดยตัวแปร bSayHello จะคอยรับค่าถ้าเป็น true หุ่นยนต์ของเราก็จะพูดได้

เรายังได้เพิ่ม Method ชื่อ “runfast” ขึ้นมาเพื่อสั่งให้มันวิ่งได้

ลองมาสร้างหุ่นยนต์สองตัวโดยใช้ init ที่ต่างกันออกไป

ThaiSwiftClass OOP Class Init Example
ThaiSwiftClass OOP Class Init Example

 จากตัวอย่าง : เราสร้างหุ่นยนต์จากแม่แบบ (Class clsRobot) และเริ่มตั้งชื่อให้ว่า “Ztar x-10” จากนั้นสั่งให้มันวิ่งด้วยคำสั่ง runfast()

ThaiSwiftClass OOP Class Init Example result
ThaiSwiftClass OOP Class Init Example result

 

หุ่นยนต์ตัวที่สองเราสร้างให้มันพูดได้ตั้งแต่เริ่ม

ThaiSwiftClass OOP Class Init Example 2 result
ThaiSwiftClass OOP Class Init Example 2 result

 

จากตัวอย่าง :  หุ่นยนต์ตัวที่สองของเราสามารถทักทายกับเราได้ เพราะเรากำหนด bSayHello เป็น true ก่อนจะสั่งให้มันวิ่งด้วยคำสั่ง runfast()

ThaiSwiftClass OOP Class Init Example 2 result
ThaiSwiftClass OOP Class Init Example 2 result

  

จะเห็นได้ว่าการประกาศและการใช้งาน Class เบื้องต้น จะคล้ายๆ Struct เลยใช่ใหมครับ? แต่จริงๆแล้ว พื้นฐานที่จำเป็นสำหรับเรื่อง OOP หรือการใช้ Class ในการทำงานที่เราต้องเรียนรู้นั้นมีความสามารถที่เหนือกว่า Struct อยู่ มาลองดูแบบแรกกันก่อนนะครับ

1. Inheritance : ความสามารถแรกของ Class คือเราสามารถสืบทอดความสามารถของ Class แม่มายัง Class ลูกได้ คือเราแค่ประกาศ Class หลักหรือแม่พิมพ์หลักเอาไว้แล้วเอา Class ที่ว่านี้ไปสร้างงานอื่นๆได้อีก

โดยรูปแบบการประกาศจะเป็น

class ชื่อclassลูก : ชื่อclassต้นแบบ  {  ……   }

ลองดูตัวอย่างกัน

 

ThaiSwiftClass OOP Class Inheritance Example
ThaiSwiftClass OOP Class Inheritance Example

จากตัวอย่าง : เราสร้างแม่พิมพ์สำหรับหุ่นยนต์ตำรวจ (clsRoboCob) โดยอ้างอิงจากแม่พิมพ์ต้นแบบ (clsRobot) และเพิ่มความสามารถใหม่ๆลงไปเช่น

1 flyhigh : ทำให้หุ่นยนต์เราบินได้

2 shootgun : ทำให้หุ่นยนต์เรายิงปืนปราบเหล่าร้ายได้ โดยกำหนดค่าความแรงของปืนเอาไว้ด้วย

และความสามารถหลักๆอย่าง runfast ก็ยังอยู่นะครับ

นอกจากนั้นเรายังยืม init ของตัวแม่แบบคือการตั้งชื่อมาใช้ (super.init) พร้อมกันนั้น init ตัวใหม่ก็คือเราสามารถตั้งชื่อปืนได้ด้วย (sGunName)

**จากจุดนี้ถ้าเราทำการสืบทอดคลาส (Inheritance)และต้องการทำ init หรือการสั่งให้ทำงานตั้งแต่ตอนสร้าง แล้ว Class ต้นแบบเองก็มี init อยู่แล้วเราต้องใช้คำสั่ง super.init ลงในหุ่นยนต์ตัวใหม่ของเราด้วยนะครับ ไม่งั้นติด error แน่นอน

ลองนำไปใช้งานจริงดูครับ

ThaiSwiftClass OOP Class Inheritance Example
ThaiSwiftClass OOP Class Inheritance Example

หุ่นยนต์ตัวใหม่ชื่อ myRobo มีปืนชื่อ “Laser Gun”

ThaiSwiftClass OOP Class Inheritance Example
ThaiSwiftClass OOP Class Inheritance Example

สั่งให้วิ่งได้ บินได้ และยิงด้วยความแรง 200 หน่วย 

 

สำหรับบทนี้ก็ฝากไว้เท่านี้ก่อนนะครับ เราจะมาต่อความสามารถของ OOP ในบท Class Part 2 ต่อไปครับ

 

แนะนำติชมได้ตลอดนะครับ ที่ thaiswiftclass@gmail.com และทาง https://www.facebook.com/thaiswiftclass

 

 

Leave a Reply