หากคุณต้องการเรียนรู้เกี่ยวกับตัวแปรอินสแตนซ์ Ruby วิธีทำงาน &เหตุใดจึงมีประโยชน์
คุณมาถูกที่แล้ว!
คำถามแรก…
ตัวแปรอินสแตนซ์คืออะไร
ในภาษาการเขียนโปรแกรม Ruby ตัวแปรอินสแตนซ์คือประเภทของตัวแปรที่ขึ้นต้นด้วย @ สัญลักษณ์
ตัวอย่าง :
@fruit
ตัวแปรอินสแตนซ์ถูกใช้เป็นส่วนหนึ่งของ Object-Oriented Programming (OOP) เพื่อให้วัตถุมีพื้นที่ส่วนตัวในการเก็บข้อมูล
เราว่าวัตถุสามารถ :
- ทำสิ่งต่างๆ
- รู้สิ่งต่างๆ
วิธีการทำให้สิ่งต่าง ๆ เกิดขึ้น พวกเขาทำสิ่งต่าง ๆ
ตัวแปรอินสแตนซ์เก็บข้อมูล พวกเขารู้สิ่งต่าง ๆ
ตัวอย่าง :
หากคุณมี 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 แล้ว! ตัวแปรชนิดหนึ่งที่ขึ้นต้นด้วย @ สัญลักษณ์ &ใช้ในชั้นเรียนเพื่อให้มีที่เก็บข้อมูล
อย่าลืมฝึกฝนตอนนี้ เล่นตัวอย่างโค้ดและคิดหาของคุณเอง
ขอบคุณสำหรับการอ่าน