Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Thành Thạo Biến Instance Ruby: Hướng Dẫn Thực Hành

Nếu muốn học về biến instance Ruby, cách hoạt động & tại sao hữu ích. Bạn ở đúng nơi! Câu hỏi đầu... Biến instance là gì? Trong Ruby, biến instance là loại biến bắt đầu bằng ký hiệu @. Ví dụ: @fruit. Biến instance dùng như một phần của OOP (Lập trình hướng đối tượng) để cho đối tượng không gian riêng lưu dữ liệu. Chúng ta nói đối tượng có thể: 1. Làm việc (do things) 2. Biết điều gì (know things). Phương thức làm việc xảy ra, chúng LÀM việc. Biến instance lưu dữ liệu, chúng BIẾT điều gì. Ví dụ: Class Fruit, muốn biết loại fruit, màu, trọng lượng... Tất cả thuộc tính thành biến instance. Như @color, @type, @weight. Tiếp theo: Xem ví dụ code.

Cách Định Nghĩa & Dùng Biến Instance Ruby

Định nghĩa biến instance bên trong class. Ví dụ: Class CoffeeMachine. Máy cà phê cần nước, muốn biết nước còn bao nhiêu. Làm:

 class CoffeeMachine
  def initialize
    @water = 100
  end
end 

@water là biến instance. Gán 100 cho @water làm giá trị khởi tạo. Bây giờ: Nếu có phương thức make_coffee, giảm lượng nước trong bình.

 class CoffeeMachine
  def initialize
    @water = 100
  end

  def make_coffee
    @water -= 10
  end
end 
Chú ý mỗi object CoffeeMachine tạo (bằng new) có giá trị @water riêng tư. Đúng logic, phải không? Vì nếu có 10 máy cà phê thật, mỗi cái có mức nước riêng. Đó là lý do dùng biến instance!

Cách Truy Cập Biến Instance

Biến instance không hữu ích nếu không đọc giá trị hiện tại. Đọc giá trị với cú pháp @. Như sau:

 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 

Phương thức print_water_level dùng @water in giá trị.

Sử Dụng Attribute Accessors

Bạn nhận ra không truy cập biến instance từ ngoài class. Đó là thiết kế! Đ gọi "Encapsulation" (Đóng gói), dữ liệu object được bảo vệ khỏi bên ngoài, như object Ruby khác. Cái tôi nói:

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

Trong vài trường hợp, bạn muốn cho phép. Mở "cửa sổ" vào dữ liệu object để available từ ngoài. Một cách:

 class CoffeeMachine
  def initialize
    @water = 100
  end

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

Không gì đặc biệt. Trả giá trị từ bên trong, nơi có quyền truy cập. Tùy chọn khác: attribute reader. Ví dụ:

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

Giống như trước. Chỉ khác Ruby làm việc khó cho bạn & tạo phương thức water.

Những Điều Cần Biết

Vài điều nhớ về biến instance để tránh rắc rối. Ghi nhớ:

  • Biến instance chưa định nghĩa luôn trả nil
  • Biến instance không bắt buộc tạo trong initialize, nhưng đó là cách đưa giá trị khởi tạo
  • Có cách nâng cao truy cập biến instance, như instance_variable_get, nhưng nên tránh

Btw, lấy danh sách biến instance. Như sau:

 machine.instance_variables # [:@water] 

Có thể hữu ích 🙂 Một điều nữa: Trong Rails, biến instance (như @books), dùng chia sẻ data giữa controller & view. Nhưng vẫn dùng bình thường cho class riêng.

Tóm Tắt

Bạn đã học biến instance Ruby! Loại biến bắt đầu @ & dùng trong class để cho không gian lưu dữ liệu. Đừng quên thực hành, chơi với ví dụ code & tự nghĩ ra ví dụ riêng. Cảm ơn bạn đã đọc.