Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

วิธีใช้ attr_accessor, attr_writer &attr_reader

บทความนี้เกี่ยวกับตัวเข้าถึงแอตทริบิวต์ (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 ) เพื่อเข้าถึงและตั้งค่าตัวแปรอินสแตนซ์จากภายนอกคลาส

ถึงเวลาฝึกฝนแล้ว