คลาส (Class) ใน Ruby คืออะไร?
คลาสเป็นบล็อกก่อสร้างพื้นฐานในการเขียนโปรแกรมเชิงวัตถุ (OOP) และช่วยให้คุณกำหนดแผนผัง (blueprint) สำหรับการสร้างออบเจ็กต์
ออบเจ็กต์คือผลิตภัณฑ์ของคลาส
แล้วออบเจ็กต์คืออะไร?
ออบเจ็กต์คือ "สิ่ง" เฉพาะตัว (individual "thing") ที่มีเอกลักษณ์ของตัวเอง และข้อมูลของตัวเอง
ตัวอย่าง:
คลาส Book อาจเป็นแผนผังสำหรับสร้างหนังสือ
คลาสนี้กำหนดว่า หนังสือ ทุกเล่ม มีแอตทริบิวต์ (attributes) ร่วมกัน คือ:
- ชื่อเรื่อง (title)
- ผู้แต่ง (author)
- จำนวนหน้า (pages)
- และอื่นๆ
หนังสือแต่ละเล่มคือออบเจ็กต์ และคุณสามารถสร้างออบเจ็กต์ได้มากมาย בזכות คลาส Book นั่นคือจุดประสงค์ของการสร้างคลาส พวกมันคือแผนผังที่นำกลับมาใช้ซ้ำได้สำหรับแอปพลิเคชัน Ruby ของคุณ
ตอนนี้:
คุณจะได้เรียนรู้วิธีเขียนคลาสของตัวเอง เพื่อเริ่มเขียนโค้ด OOP วันนี้เลย
วิธีสร้างคลาส Ruby
ไวยากรณ์การสร้างคลาสเป็นดังนี้:
class Orange end
สังเกตว่า:
- ชื่อคลาสขึ้นต้นด้วยตัวพิมพ์ใหญ่
- เราใช้คีย์เวิร์ด
classแล้วตามด้วยend - คลาสว่างไม่ค่อยมีประโยชน์ แตคุณยังสร้างออบเจ็กต์จากมันได้
มีวิธีสร้างคลาสอื่นๆ (เช่น Class.new) แต่วิธีเหล่านั้นมีประโยชน์เฉพาะในสถานการณ์พิเศษเท่านั้น
หนึ่งคลาส หลายออบเจ็กต์
การใช้งานหลักของคลาสคือเป็นคอนเทนเนอร์ของเมธอด ตัวแปรอินสแตนซ์ และค่าคงที่ (constants) สร้างเป็นแผนผังที่คุณสามารถสร้างออบเจ็กต์ได้
คุณสามารถสร้างออบเจ็กต์โดยใช้เมธอด new
เช่นนี้:
Orange.new
เรารู้จักกระบวนการสร้างออบเจ็กต์ว่า "instantiation" (การสร้างอินสแตนซ์) และเราบอกว่าออบเจ็กต์คือ "instance" (อินสแตนซ์) ของคลาส
ทำไมต้องสร้างออบเจ็กต์?
เพราะทุกออบเจ็กต์ที่คุณสร้าง ต่างกันและเป็นเอกลักษณ์
ทุกออบเจ็กต์มีเอกลักษณ์ของตัวเอง
ตัวอย่าง:
กับคลาส Orange ทุกออบเจ็กต์ orange ที่คุณสร้าง มี น้ำหนัก ที่มาประเทศ คุณภาพ เป็นต้น ของตัวเอง
ทำให้คลาส Ruby มีประโยชน์มากขึ้น
คลาสจะมีประโยชน์มากขึ้นเมื่อคุณเริ่มเพิ่มเมธอดอินสแตนซ์ และตัวแปรอินสแตนซ์ เข้าไป
เมธอดคือสิ่งที่คลาสของคุณทำได้
ตัวอย่าง:
คุณสามารถบีบส้มเพื่อน้ำผลไม้
ตัวอย่างโค้ด:
class Orange
def squeeze
puts "Here's your juice!"
end
end
orange = Orange.new
orange.squeeze
เมธอดเหล่านี้กลายเป็นคำสั่งสำหรับออบเจ็กต์ของคุณ!
ทุกออบเจ็กต์ Orange ที่คุณสร้างจะเข้าถึงเมธอด squeeze นี้ได้ และนั่นคือหนึ่งในประโยชน์ของการใช้คลาส
ตัวแปรอินสแตนซ์ (Instance variable) คือ สิ่งที่คลาสของคุณรู้
ตัวอย่าง:
class Orange
def initialize
@juice_available = 100
end
def squeeze
@juice_available -= 50
end
end
ตัวแปรอินสแตนซ์ต่างจากตัวแปรกลาง เพราะมันขึ้นต้นด้วยสัญลักษณ์ @ คุณไม่สามารถเข้าถึงมันจากนอกคลาสได้ เว้นแต่คุณกำหนด attr_accessor
มันคือคลาสอะไร?
เมื่อทำงานกับออบเจ็กต์ใน Ruby มันช่วยได้มากถ้ารู้ว่าออบเจ็กต์นั้นมาจากคลาสอะไร
คุณสามารถทำได้แบบนี้:
"".class # String [].class # Array orange.class # Orange (สมมติ orange = Orange.new)
ทำไมจึงมีประโยชน์?
เมธอดคือเครื่องยนต์เล็กๆ ที่ทำให้สิ่งต่างๆ เกิดขึ้นใน Ruby
ถ้าคุณรู้คลาส คุณสามารถหาได้ว่ามีเมธอดไหนบ้าง (ใช้ Google, ri, หรือ pry) กล่าวคือ คุณสามารถค้นพบได้ว่าออบเจ็กต์นั้นทำอะไรให้คุณได้บ้าง!
เรียนรู้เพิ่มเติมเกี่ยวกับคลาส
นี่แค่ "ปลายของน้ำแข็ง" (tip of the iceberg) เมื่อพูดถึงคลาส
ถ้าคุณอยากเรียนรู้เพิ่ม...
อ่าน这些:
- Ruby initialize method
- Attr_accessor, attr_reader, attr_writer
- Inheritance in OOP
- Object-Oriented Programming
ก็อีกอย่าง คลาสเองก็เป็นออบเจ็กต์ด้วย ใน Ruby นะครับ 🙂
สรุป
คุณได้เรียนรู้เกี่ยวกับคลาสใน Ruby วิธีสร้าง และทำไมมันถึงมีประโยชน์!
อย่าลืมแชร์บทความนี้เพื่อให้คนอื่นเพลิดเพลินไปกับมัน
ขอบคุณที่อ่านครับ