Computer >> Máy Tính >  >> Lập trình >> Ruby

Đọc phần này nếu bạn muốn hiểu các biến cá thể trong Ruby

Nếu bạn muốn tìm hiểu về các biến phiên bản Ruby, cách chúng hoạt động và tại sao chúng lại hữu ích.

Bạn đang ở đúng nơi!

Câu hỏi đầu tiên…

Biến phiên bản là gì?

Trong ngôn ngữ lập trình Ruby, một biến thể hiện là một loại biến bắt đầu bằng @ biểu tượng.

Ví dụ :

@fruit

Một biến thể hiện được sử dụng như một phần của Lập trình hướng đối tượng (OOP) để cung cấp cho các đối tượng không gian riêng để lưu trữ dữ liệu.

Chúng tôi nói rằng các đối tượng có thể :

  1. Làm mọi việc
  2. Biết nhiều điều

Các phương pháp làm cho mọi thứ xảy ra, chúng LÀM mọi thứ.

Các biến phiên bản lưu trữ dữ liệu, chúng BIẾT mọi thứ.

Ví dụ :

Nếu bạn có Fruit lớp học, bạn có thể muốn biết đó là loại trái cây gì, màu sắc, trọng lượng, v.v.

Tất cả các thuộc tính này đều trở thành các biến phiên bản.

Thích @color , @type , @weight .

Tiếp theo :

Hãy xem các ví dụ về mã.

Cách xác định và sử dụng các biến phiên bản Ruby

Bạn xác định các biến cá thể bên trong các lớp.

Ví dụ :

Giả sử chúng ta có CoffeeMachine lớp học.

Máy pha cà phê cần nước, vì vậy bạn có thể muốn biết lượng nước sẵn có.

Chúng tôi có thể làm điều này :

class CoffeeMachine
  def initialize
    @water = 100
  end
end

@water này là biến phiên bản của chúng tôi.

Chúng tôi chỉ định 100 thành @water làm giá trị ban đầu.

Bây giờ :

Nếu chúng tôi có make_coffee phương pháp này, chúng tôi có thể giảm lượng nước còn lại trong bể.

class CoffeeMachine
  def initialize
    @water = 100
  end

  def make_coffee
    @water -= 10
  end
end

Lưu ý rằng mọi CoffeeMachine đối tượng bạn tạo (với new ) sẽ có giá trị riêng cho @water .

Có lý, phải không?

Bởi vì nếu bạn có 10 máy pha cà phê thực tế, mỗi máy sẽ có mực nước riêng.

Đó là lý do tại sao chúng tôi sử dụng các biến phiên bản!

Cách truy cập các biến phiên bản

Các biến phiên bản sẽ không hữu ích lắm nếu bạn không đọc được giá trị hiện tại của chúng.

Bạn có thể đọc một giá trị biến cá thể bằng @ cú pháp.

Như thế này :

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 phương pháp sử dụng @water để in giá trị của nó.

Sử dụng Trình truy cập thuộc tính

Bạn có thể nhận thấy rằng bạn không thể truy cập các biến phiên bản từ bên ngoài lớp học.

Đó là do thiết kế!

Đó là những gì chúng tôi gọi là "Đóng gói", dữ liệu của một đối tượng được bảo vệ khỏi thế giới bên ngoài, giống như các đối tượng Ruby khác.

Đây là ý của tôi :

machine = CoffeeMachine.new

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

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

Trong một số trường hợp, bạn có thể muốn cho phép điều này.

Bạn có thể mở một cửa sổ vào dữ liệu của đối tượng để nó có sẵn từ bên ngoài.

Một cách để làm điều đó :

class CoffeeMachine
  def initialize
    @water = 100
  end

  def water
    @water
  end
end

machine = CoffeeMachine.new
machine.water

# 100

Không có gì đặc biệt ở đây.

Chúng tôi đang trả lại giá trị từ bên trong, nơi chúng tôi có quyền truy cập vào nó .

Một tùy chọn khác là sử dụng trình đọc thuộc tính.

Ví dụ :

class CoffeeMachine
  attr_reader :water

  def initialize
    @water = 100
  end
end

machine = CoffeeMachine.new
machine.water

# 100

Điều tương tự như trước đây.

Chỉ khác là Ruby sẽ làm công việc khó khăn cho bạn và tạo ra water đó phương pháp.

Những điều bạn nên biết

Một số điều cần nhớ về các biến phiên bản để bạn không gặp rắc rối.

Ghi chú :

  • Một biến phiên bản không xác định luôn trả về nil
  • Các biến phiên bản không cần phải được tạo trong initialize nhưng đó là cách bạn cung cấp cho họ giá trị ban đầu
  • Có những cách nâng cao để truy cập các biến phiên bản, như instance_variable_get , nhưng bạn nên tránh những điều này

Btw, bạn có thể nhận được danh sách các biến phiên bản.

Như thế này :

machine.instance_variables
# [:@water]

Bạn có thể thấy điều đó hữu ích 🙂

Một điều nữa :

Trong Rails, các biến phiên bản (như @books ), được sử dụng để chia sẻ dữ liệu giữa bộ điều khiển và chế độ xem của bạn.

Nhưng bạn vẫn có thể sử dụng chúng bình thường cho các lớp học của riêng bạn.

Tóm tắt

Bạn đã học về các biến cá thể của Ruby! Một loại biến bắt đầu bằng @ biểu tượng &nó được sử dụng bên trong các lớp để cung cấp cho chúng một nơi lưu trữ dữ liệu.

Đừng quên thực hành ngay bây giờ, chơi với các ví dụ mã và nghĩ ra mã của riêng bạn.

Cảm ơn vì đã đọc.