Bài viết này nói về trình truy cập thuộc tính (attr_accessor
) bằng Ruby.
Nếu bạn đang vội, hãy cuộn xuống.
Bởi vì tôi muốn bắt đầu bằng cách giải thích:
Tại sao chúng tôi sử dụng trình truy cập thuộc tính !
Giả sử bạn có một lớp với các biến phiên bản và bạn muốn đưa chúng ra thế giới bên ngoài.
Làm thế nào?
Bạn phải xác định một phương pháp.
Chỉ các phương thức mới có thể truy cập các biến phiên bản.
Tại sao?
Vì bạn sẽ gặp lỗi nếu không làm điều này.
Đây là một ví dụ :
class Food def initialize(protein) @protein = protein end end bacon = Food.new(21) bacon.protein # NoMethodError: undefined method `protein'
NoMethodError
là lỗi bạn gặp phải khi yêu cầu giá trị của protein
mà không có thiết lập thích hợp.
Giải pháp là gì?
Bạn có thể xác định phương pháp của riêng mình như thế này :
class Food def protein @protein end end bacon.protein # 21
Trong các ngôn ngữ OOP khác, phương pháp này được gọi là phương pháp "getter". Bạn xác định một phương thức lấy cho bạn giá trị của biến phiên bản.
Bạn cũng có thể muốn thay đổi giá trị.
Đối với điều đó, bạn sẽ cần một phương pháp khác , như thế này:
class Food def protein=(value) @protein = value end end bacon.protein = 25
Hãy tưởng tượng bạn đang mở một cổng vào đối tượng để bạn có thể thay đổi giá trị.
Đó là những gì điều này đang làm.
Bây giờ :
Có cách nào tốt hơn để xác định loại phương pháp này không?
Bạn thích một số loại phím tắt?
Vâng!
Có 🙂
Đó là nơi attr_accessor
đi vào.
Ví dụ về Ruby attr_accessor
Bạn có thể yêu cầu Ruby tạo các phương thức này cho bạn bằng attr_accessor
.
Đây là cách thực hiện :
class Food attr_accessor :protein def initialize(protein) @protein = protein end end
Nhìn vào dòng này :
attr_accessor :protein
Đây là một phương thức Ruby tạo ra các phương thức khác cho bạn.
Phương pháp nào?
Đối với ví dụ này, nó tạo ra:
-
protein
-
protein=
Đây là những phương pháp giống như chúng tôi đã tạo trước đây…
Nhưng bây giờ bạn không cần phải gõ chúng ra.
Đó là một lối tắt!
attr_accessor so với attr_reader
Bên cạnh đó attr_accessor
, bạn cũng có các loại trình truy cập khác.
Chính xác là ba trong số đó :
-
attr_accessor
-
attr_reader
-
attr_writer
Sự khác biệt giữa chúng là gì?
Vâng, attr_accessor tạo cả hai phương thức READER &WRITER.
-
attr_reader
chỉ tạo trình đọc. -
attr_writer
chỉ tạo ra người viết.
Nói cách khác :
Với attr_reader
bạn chỉ có thể đọc giá trị, nhưng không thể thay đổi nó. Với attr_writer
bạn chỉ có thể thay đổi một giá trị nhưng không thể đọc nó.
Nhiều biến phiên bản
Bạn muốn xác định nhiều phương thức thuộc tính?
Bạn có thể làm được.
Nhưng bạn phải sử dụng đúng cú pháp.
Như thế này :
attr_reader :name, :value, :ready?
Bạn có thể tạo bao nhiêu tùy ý.
Xem hướng dẫn bằng video
Tóm tắt
Bạn đã tìm hiểu về các trình truy cập thuộc tính trong Ruby! Bộ 3 phương pháp (attr_accessor
, attr_writer
&attr_reader
) để truy cập &đặt các biến phiên bản từ bên ngoài lớp.
Bây giờ đã đến lúc luyện tập.