หากคุณต้องการเรียนรู้เกี่ยวกับตัวแปรอินสแตนซ์ 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 แล้ว! ตัวแปรชนิดหนึ่งที่ขึ้นต้นด้วย @
สัญลักษณ์ &ใช้ในชั้นเรียนเพื่อให้มีที่เก็บข้อมูล
อย่าลืมฝึกฝนตอนนี้ เล่นตัวอย่างโค้ดและคิดหาของคุณเอง
ขอบคุณสำหรับการอ่าน