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

อ่านสิ่งนี้หากคุณต้องการทำความเข้าใจตัวแปรอินสแตนซ์ใน Ruby

หากคุณต้องการเรียนรู้เกี่ยวกับตัวแปรอินสแตนซ์ Ruby วิธีทำงาน &เหตุใดจึงมีประโยชน์

คุณมาถูกที่แล้ว!

คำถามแรก…

ตัวแปรอินสแตนซ์คืออะไร

ในภาษาการเขียนโปรแกรม Ruby ตัวแปรอินสแตนซ์คือประเภทของตัวแปรที่ขึ้นต้นด้วย @ สัญลักษณ์

ตัวอย่าง :

@fruit

ตัวแปรอินสแตนซ์ถูกใช้เป็นส่วนหนึ่งของ Object-Oriented Programming (OOP) เพื่อให้วัตถุมีพื้นที่ส่วนตัวในการเก็บข้อมูล

เราว่าวัตถุสามารถ :

  1. ทำสิ่งต่างๆ
  2. รู้สิ่งต่างๆ

วิธีการทำให้สิ่งต่าง ๆ เกิดขึ้น พวกเขาทำสิ่งต่าง ๆ

ตัวแปรอินสแตนซ์เก็บข้อมูล พวกเขารู้สิ่งต่าง ๆ

ตัวอย่าง :

หากคุณมี Fruit ท่านอาจต้องการทราบว่าเป็นผลไม้ชนิดใด สีอะไร น้ำหนัก เป็นต้น

คุณลักษณะเหล่านี้ทั้งหมดกลายเป็นตัวแปรอินสแตนซ์

ชอบ @color , @type , @weight .

ถัดไป :

มาดูตัวอย่างโค้ดกัน

วิธีกำหนดและใช้ตัวแปรอินสแตนซ์ทับทิม

คุณกำหนดตัวแปรอินสแตนซ์ภายในคลาส

ตัวอย่าง :

สมมติว่าเรามี CoffeeMachine ชั้นเรียน

เครื่องชงกาแฟต้องการน้ำ คุณจึงอาจต้องการทราบว่ามีน้ำมากแค่ไหน

เราทำได้ :

class CoffeeMachine
  def initialize
    @water = 100
  end
end

นี่ @water เป็นตัวแปรอินสแตนซ์ของเรา

เรากำหนด 100 ไปที่ @water เป็นค่าเริ่มต้น

ตอนนี้ :

ถ้าเรามี make_coffee เราสามารถลดปริมาณน้ำที่เหลืออยู่ในถังได้

class CoffeeMachine
  def initialize
    @water = 100
  end

  def make_coffee
    @water -= 10
  end
end

สังเกตว่าทุก CoffeeMachine วัตถุที่คุณสร้าง (ด้วย new ) จะมีค่าส่วนตัวสำหรับ @water .

สมเหตุสมผลใช่ไหม

เพราะถ้าคุณมีเครื่องชงกาแฟจริง 10 เครื่อง แต่ละเครื่องก็จะมีระดับน้ำของตัวเอง

นั่นเป็นเหตุผลที่เราใช้ตัวแปรอินสแตนซ์!

วิธีเข้าถึงตัวแปรอินสแตนซ์

ตัวแปรอินสแตนซ์จะไม่มีประโยชน์มากหากคุณอ่านค่าปัจจุบันไม่ได้

คุณสามารถอ่านค่าตัวแปรอินสแตนซ์ด้วย @ ไวยากรณ์

ถูกใจสิ่งนี้ :

class CoffeeMachine
  def initialize
    @water = 50
  end

  def print_water_level
    puts "Water Level: #{@water}"
  end
end

machine = CoffeeMachine.new
machine.print_water_level

# Water Level: 50

print_water_level เมธอดใช้ @water เพื่อพิมพ์ค่า

การใช้แอ็ตทริบิวต์แอ็ตทริบิวต์

คุณอาจสังเกตเห็นว่าคุณไม่สามารถเข้าถึงตัวแปรอินสแตนซ์จาก ภายนอก ชั้นเรียน

นั่นคือการออกแบบ!

สิ่งที่เราเรียกว่า "การห่อหุ้ม" ข้อมูลของวัตถุได้รับการปกป้องจากโลกภายนอก เช่นเดียวกับวัตถุ Ruby อื่นๆ

นี่คือสิ่งที่ฉันหมายถึง :

machine = CoffeeMachine.new

machine.water
# NoMethodError: undefined method `water' for #<CoffeeMachine:0x2d0a530>

machine.@water
# SyntaxError: unexpected tIVAR, expecting '('

ในบางกรณี คุณอาจต้องการอนุญาตสิ่งนี้

คุณสามารถเปิดหน้าต่างเข้าไปในข้อมูลของวัตถุเพื่อให้ใช้งานได้จากภายนอก

วิธีหนึ่งในการทำเช่นนั้น :

class CoffeeMachine
  def initialize
    @water = 100
  end

  def water
    @water
  end
end

machine = CoffeeMachine.new
machine.water

# 100

ไม่มีอะไรพิเศษที่นี่

เรากำลังคืนค่าจากภายใน ที่เราสามารถเข้าถึงได้ .

อีกทางเลือกหนึ่งคือการใช้โปรแกรมอ่านแอตทริบิวต์

ตัวอย่าง :

class CoffeeMachine
  attr_reader :water

  def initialize
    @water = 100
  end
end

machine = CoffeeMachine.new
machine.water

# 100

เหมือนเดิม

ข้อแตกต่างเพียงอย่างเดียวคือ Ruby จะทำงานหนักเพื่อคุณและสร้าง water วิธีการ

สิ่งที่คุณควรรู้

ข้อควรจำบางประการเกี่ยวกับตัวแปรอินสแตนซ์เพื่อไม่ให้เกิดปัญหา

จดบันทึก :

  • ตัวแปรอินสแตนซ์ที่ไม่ได้กำหนดจะคืนค่า nil . เสมอ
  • ไม่จำเป็นต้องสร้างตัวแปรอินสแตนซ์ใน initialize วิธี แต่นั่นคือวิธีที่คุณให้ค่าเริ่มต้นแก่พวกเขา
  • มีวิธีขั้นสูงในการเข้าถึงตัวแปรอินสแตนซ์ เช่น instance_variable_get แต่คุณควรหลีกเลี่ยงสิ่งเหล่านี้

อย่างไรก็ตาม คุณสามารถรับรายการตัวแปรอินสแตนซ์ได้

ถูกใจสิ่งนี้ :

machine.instance_variables
# [:@water]

คุณอาจพบว่ามีประโยชน์ 🙂

อีกสิ่งหนึ่ง :

ใน Rails ตัวแปรอินสแตนซ์ (เช่น @books ) ใช้เพื่อแชร์ข้อมูลระหว่างผู้ควบคุมและมุมมองของคุณ

แต่คุณยังสามารถใช้งานได้ตามปกติสำหรับชั้นเรียนของคุณเอง

สรุป

คุณได้เรียนรู้เกี่ยวกับตัวแปรอินสแตนซ์ Ruby แล้ว! ตัวแปรชนิดหนึ่งที่ขึ้นต้นด้วย @ สัญลักษณ์ &ใช้ในชั้นเรียนเพื่อให้มีที่เก็บข้อมูล

อย่าลืมฝึกฝนตอนนี้ เล่นตัวอย่างโค้ดและคิดหาของคุณเอง

ขอบคุณสำหรับการอ่าน