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ể :
- Làm mọi việc
- 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.