เมธอด initialize เป็นส่วนหนึ่งของกระบวนการสร้างออบเจ็กต์ใน Ruby และช่วยให้คุณตั้งค่าเริ่มต้นสำหรับออบเจ็กต์
ในภาษาโปรแกรมอื่น เรียกมันว่า "constructor" (คอนสตรัคเตอร์)
ตัวอย่าง:
สมมติว่าคุณมีคลาส Point จุดนี้ต้องการพิกัดสองค่า x และ y
คุณจะส่งค่าเหล่านี้เข้าไปในออบเจ็กต์อย่างไร?
เช่นนี้:
Point.new(10, 20)
เมธอด new คือวิธีที่คุณสร้างออบเจ็กต์ใหม่ใน Ruby จากคลาสอย่าง Point หรือคลาสอื่นๆ ที่คุณเข้าถึงได้
ความสัมพันธ์ระหว่าง New และ Initialize
สังเกตอาร์กิวเมนต์สองตัวนี้ 10 และ 20?
นี่คือที่ที่เรากลับมาที่เมธอด initialize
ถ้าคุณพยายามส่งอาร์กิวเมนต์เข้า new และถ้าคุณ ไม่ กำหนด initialize คุณจะได้ข้อผิดพลาด:
ArgumentError: wrong number of arguments (2 for 0)
เพราะเมื่อคุณเรียก new Ruby จะเรียก initialize!
คุณต้องการนี้:
class Point def initialize(x, y) end end
ตอนนี้คุณสามารถสร้างออบเจ็กต์ Point ด้วยสองอาร์กิวเมนต์ได้
จุดประสงค์ทั้งหมดของ initialize คือเพื่อให้คุณสร้างออบเจ็กต์พร้อมอาร์กิวเมนต์ได้
การบันทึกอาร์กิวเมนต์
อาร์กิวเมนต์ที่ส่งเข้า initialize ไม่ได้ถูกบันทึกไว้ที่ไหนโดยอัตโนมัติ
คุณต้องทำด้วยตัวแปรอินสแตนซ์:
class Point
def initialize(x, y)
@x = x
@y = y
end
end
สิ่งนี้จะกำหนดค่า x และ y ให้ตัวแปรอินสแตนซ์ (@x และ @y) เพื่อให้คุณเข้าถึงได้ภายหลัง
จุดสำคัญบางอย่างเกี่ยวกับ initialize:
- คุณสามารถกำหนด optional และ default arguments ได้
- การใช้
returnภายในเมธอดนี้ ไม่มีความหมาย เพราะมันพิเศษและจะ คืนค่าออบเจ็กต์ใหม่เสมอ - การกำหนด
initializeไม่จำเป็น หากคลาสของคุณไม่ต้องการอาร์กิวเมนต์
คุณสามารถเรียกเมธอดอื่นภายใน initialize ได้ แตคุณไม่อยากทำงานจริงจังที่นี่ นอกจากสิ่งที่จำเป็นต่อการเตรียมออบเจ็กต์ให้พร้อมใช้งาน
ตัวอย่าง:
ถ้าคลาสของคุณเกี่ยวกับการทำงานกับ Github API คุณไม่อยากโหลดคำขอทั้งหมดที่เป็นไปได้ไปที่ API ก่อนเวลา
คุณแค่อยากบันทึก API key ลงในตัวแปรอินสแตนซ์
หรือข้อมูลอะไรก็ตามที่คลาสของคุณต้องการ
การ Initialize Hashes และ Built-in Objects อื่นๆ
ออบเจ็กต์ built-in เหมือน hashes มีวิธีพิเศษในการ initialize และสร้าง นอกเหนือจากการเรียก new
วิธีสร้าง hash:
h = Hash.new
h = Hash['a', 1]
h = {}
วิธีสร้าง string:
s = String.new s = "" s = %Q()
วิธีสร้าง array:
a = Array.new(5) a = %w(a b c) a = []
%w สร้างอาร์เรย์ของสตริง
สรุป
คุณได้เรียนรู้เกี่ยวกับเมธอด initialize ของ Ruby ความสัมพันธ์กับเมธอด new และพื้นฐานการสร้างออบเจ็กต์ใน Ruby
เรียนรู้ต่อได้จากบทนำนี้เกี่ยวกับ Object-Oriented Programming ใน Ruby
ขอบคุณที่อ่านครับ!