บทความนี้เกี่ยวกับตัวเข้าถึงแอตทริบิวต์ (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 ที่สร้างวิธีการอื่นๆ ให้กับคุณ
วิธีการอะไร
สำหรับตัวอย่างนี้ จะสร้าง:
proteinprotein=
นี่เป็นวิธีการเดียวกันกับที่เราสร้างขึ้นก่อนหน้านี้…
แต่ตอนนี้คุณไม่ต้องพิมพ์แล้ว
มันเป็นทางลัด!
attr_accessor เทียบกับ attr_reader
นอกจาก attr_accessor คุณยังมีอุปกรณ์เสริมประเภทอื่นๆ ด้วย
สามตัวตรง :
attr_accessorattr_readerattr_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 ) เพื่อเข้าถึงและตั้งค่าตัวแปรอินสแตนซ์จากภายนอกคลาส
ถึงเวลาฝึกฝนแล้ว