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

เชี่ยวชาญ Ruby Instance Variables: คู่มือปฏิบัติจริง

อยากเรียน Instance Variables ใน Ruby — ทำงานยังไง ทำไมถึงสำคัญ — มาที่ถูกแล้ว!

คำถามแรก... Instance Variable คืออะไร?

ใน Ruby Instance Variable คือ Variable ที่ขึ้นต้นด้วย @ Symbol

ตัวอย่าง: @fruit

Instance Variable ใช้ใน OOP ให้ Objects มี Private Space เก็บ Data

เราบอกว่า Objects สามารถ:

  1. Do things (ทำสิ่งต่างๆ)
  2. Know things (รู้สิ่งต่างๆ)

Methods ทำให้สิ่งต่างๆ เกิดขึ้น — พวกมัน DO Things

Instance Variables เก็บ Data — พวกมัน KNOW Things

ตัวอย่าง: Class Fruit อยากรู้ชนิด สี น้ำหนัก — ทั้งหมดกลายเป็น Instance Variables: @color, @type, @weight

ต่อไป: มาดู Code Examples

วิธี Define และ Use Ruby Instance Variables

Define Instance Variables ภายใน Classes

ตัวอย่าง: Class CoffeeMachine — ต้องการน้ำ ต้องรู้เหลือเท่าไหร่

ทำได้แบบนี้:

 class CoffeeMachine
  def initialize
    @water = 100
  end
end 

@water = Instance Variable — กำหนด 100 เป็น Initial Value

ตอนนี้: เมธอด make_coffee ลดน้ำในถัง

 class CoffeeMachine
  def initialize
    @water = 100
  end
  def make_coffee
    @water -= 10
  end
end 

สังเกต: ทุก CoffeeMachine Object ที่สร้าง (new) จะมี @water Private ของตัวเอง — สมเหตุสมผล เพราะเครื่องกาแฟ 10 เครื่อง น้ำแต่ละเครื่องต่างกัน!

นั่นคือเหตุผลที่用 Instance Variables!

วิธี Access Instance Variables

Instance Variables ไม่ประโยชน์ถ้าอ่านค่าปัจจุบันไม่ได้ — 讀ค่าได้ด้วย @ Syntax

แบบนี้:

 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 พิมพ์ค่า

ใช้ Attribute Accessors

สังเกตว่า Instance Variables เข้าถึงจาก นอก Class ไม่ได้ — Design นี้!

เรียกว่า "Encapsulation" — Data ของ Object ป้องกันจาก Outside World (Objects อื่น)

เช่นนี้:

 machine = CoffeeMachine.new
machine.water # NoMethodError: undefined method `water'
machine.@water # SyntaxError: unexpected tIVAR, expecting '(' 

บางครั้งอยาก Allow — เปิด "หน้าต่าง" ให้ Data เข้าถึงจากนอกได้

วิธีหนึ่ง:

 class CoffeeMachine
  def initialize
    @water = 100
  end
  def water
    @water
  end
end
machine = CoffeeMachine.new
machine.water # 100 

ไม่มีอะไรพิเศษ — Return ค่าจากใน (ที่เข้าถึงได้)

อีกทางคือ Attribute Reader:

 class CoffeeMachine
  attr_reader :water
  def initialize
    @water = 100
  end
end
machine = CoffeeMachine.new
machine.water # 100 

เหมือนกัน — แต Ruby สร้าง Method water ให้อัตโนมัติ

สิ่งที่ควรทราบ

จดไว้กันลืม:

  • Undefined Instance Variable คืน nil เสมอ
  • Instance Variables ไม่บังคับสร้างใน initialize แต่นั่นคือวิธีให้ Initial Value
  • มี Advanced Ways เข้าถึง เช่น instance_variable_get แตควรหลีกเลี่ยง

Btw ดู List Instance Variables ได้:

 machine.instance_variables # [:@water] 

อาจช่วยได้ 🙂

อีกอย่าง: ใน Rails Instance Variables (@books) ใช้ Share Data ระหว่าง Controller และ Views — แตยัง用ได้ปกติสำหรับ Classes ของคุณ

Summary (สรุป)

คุณเรียนรู้ Ruby Instance Variables! Variable เริ่ม @ ใช้ใน Classes ให้มีที่เก็บ Data

อย่าลืม Practice เล่น Code Examples สร้างเอง — ขอบคุณที่อ่านครับ