บทความนี้เกี่ยวกับตัวเข้าถึงแอตทริบิวต์ (attr_accessor
) ใน Ruby.
หากคุณกำลังรีบ ให้เลื่อนลงมา
เพราะฉันต้องการเริ่มต้นด้วยการอธิบาย:
เหตุใดเราจึงใช้ตัวเข้าถึงแอตทริบิวต์ !
สมมติว่าคุณมีคลาสที่มีตัวแปรอินสแตนซ์และต้องการเปิดเผยต่อโลกภายนอก
อย่างไร?
คุณต้องกำหนดวิธีการ
เฉพาะเมธอดเท่านั้นที่เข้าถึงตัวแปรอินสแตนซ์ได้
ทำไม?
เพราะคุณจะได้รับข้อผิดพลาดหากไม่ทำเช่นนี้
นี่คือตัวอย่าง :
class Food def initialize(protein) @protein = protein end end bacon = Food.new(21) bacon.protein # NoMethodError: undefined method `protein'
NoMethodError
เป็นข้อผิดพลาดที่คุณได้รับเมื่อคุณขอค่า protein
โดยไม่ต้องตั้งค่าที่เหมาะสม
วิธีแก้ปัญหาคืออะไร
คุณสามารถกำหนดวิธีการของคุณเองเช่นนี้ :
class Food def protein @protein end end bacon.protein # 21
ในภาษา OOP อื่นๆ นี่เรียกว่าวิธี "getter" คุณกำหนดวิธีการที่รับค่าของตัวแปรอินสแตนซ์
คุณอาจต้องการเปลี่ยนค่าด้วย
สำหรับสิ่งนั้น คุณจะต้องใช้วิธีอื่น , ชอบอันนี้:
class Food def protein=(value) @protein = value end end bacon.protein = 25
ลองนึกภาพว่าคุณกำลังเปิดประตูเข้าไปในวัตถุเพื่อให้คุณสามารถเปลี่ยนค่าได้
นั่นคือสิ่งที่กำลังทำอยู่
ตอนนี้ :
มีวิธีอื่นที่ดีกว่าในการกำหนดวิธีการนี้หรือไม่
ชอบทางลัดไหม
ใช่!
มี 🙂
นั่นคือที่ที่ attr_accessor
เข้ามาค่ะ
ตัวอย่างทับทิม attr_accessor
คุณสามารถบอกให้ Ruby สร้างวิธีการเหล่านี้ให้กับคุณด้วย attr_accessor
.
ตามนี้เลย :
class Food attr_accessor :protein def initialize(protein) @protein = protein end end
ดูที่บรรทัดนี้ :
attr_accessor :protein
นี่คือวิธี Ruby ที่สร้างวิธีการอื่นๆ ให้กับคุณ
วิธีการอะไร
สำหรับตัวอย่างนี้ จะสร้าง:
protein
protein=
นี่เป็นวิธีการเดียวกันกับที่เราสร้างขึ้นก่อนหน้านี้…
แต่ตอนนี้คุณไม่ต้องพิมพ์แล้ว
มันเป็นทางลัด!
attr_accessor เทียบกับ attr_reader
นอกจาก attr_accessor
คุณยังมีอุปกรณ์เสริมประเภทอื่นๆ ด้วย
สามตัวตรง :
attr_accessor
attr_reader
attr_writer
อะไรคือความแตกต่างระหว่างพวกเขา?
attr_accessor สร้างทั้งเมธอด READER &WRITER
attr_reader
สร้างแต่ผู้อ่านเท่านั้น-
attr_writer
สร้างแต่ตัวผู้เขียนเท่านั้น
กล่าวอีกนัยหนึ่ง :
ด้วย attr_reader
คุณสามารถอ่านค่าได้เท่านั้น แต่ไม่สามารถเปลี่ยนแปลงได้ ด้วย attr_writer
คุณสามารถเปลี่ยนค่าได้เท่านั้นแต่ไม่สามารถอ่านได้
ตัวแปรหลายอินสแตนซ์
ต้องการกำหนดวิธีการแอตทริบิวต์หลายวิธีหรือไม่
คุณทำได้
แต่คุณต้องใช้ไวยากรณ์ที่ถูกต้อง
ถูกใจสิ่งนี้ :
attr_reader :name, :value, :ready?
คุณสามารถสร้างได้มากเท่าที่คุณต้องการ
ชมวิดีโอการสอน
สรุป
คุณได้เรียนรู้เกี่ยวกับการเข้าถึงแอตทริบิวต์ใน Ruby แล้ว! ชุด 3 วิธี (attr_accessor
, attr_writer
&attr_reader
) เพื่อเข้าถึงและตั้งค่าตัวแปรอินสแตนซ์จากภายนอกคลาส
ถึงเวลาฝึกฝนแล้ว