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

Cách sử dụng attr_accessor, attr_writer &attr_reader

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.