Getter and Setter method in Ruby
Ruby
116
White

My Mai viết ngày 27/05/2015

Bài viết này mình sẽ nói về getter & setter method và attribute trong Ruby

Getter method khi lấy giá trị của instance variable
Setter method khi muốn thay đổi giá trị của instance variable

Xem ví dụ dưới đây:

class User
  def initialize(name)
    @name = name
  end
  # getter method
  def getter_name
    @name
  end
  # setter method 
  def setter_name=(name) # Đây là cách viết của setter method
    @name = name
  end
end

user = User.new('Paul')
# Lấy tên user bằng cách dùng getter method
user.getter_name #  Tên lúc này là Paul
# Thay đổi tên user bằng cách dùng setter method
user.setter_name = "Brian" #  Tên lúc này là Brian

Qua ví dụ trên bạn thấy để viết method getter & setter nó khá là dài. Vậy có cách nào rút ngắn code hơn không? Câu trả lời là có
Ruby có cung cấp cho bạn các loại attributes sau giúp bạn có thể sử dụng nó dễ dàng hơn:
attr_reader:
Cái này tương đương với getter method
attr_writer:
Cái này tương đương với setter method
attr_accessor:
Nếu đã có attr đại diện cho getter và setter method. Vì sao lại có attr_accessor này?
attr_accessor là kết hợp giữa attr_reader && attr_writer có nghĩa là 1 method vừa có tính chất của getter & setter

Cách sử dụng của 3 attributes trên là bạn phải đặt tên của attribute trùng mới tên của variable.
Ví dụ trên dùng với attributes

class Item
  attr_reader :getter_item
  attr_writer :setter_item
  attr_accessor :accessor_item
  def initialize(getter_item, setter_item, accessor_item)
    @getter_item = getter_item
    @setter_item = setter_item
    @accessor_item = accessor_item
  end
end

item = Item.new('this is a getter', 'this is a setter', 'this is an accessor')
item.getter_item
item.setter_item = "update value for setter"
item.accessor_item = "update value for accessor"
Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

My Mai

34 bài viết.
187 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
23 21
Bạn muốn load 3 image khác nhau (Ý mình ở đây là dùng tag không phải background nhé) cho 3 loại màn hình khác nhau (small, medium, large). Bạn sẽ l...
My Mai viết hơn 3 năm trước
23 21
White
21 8
Lotus là gì? (Link) là một Ruby Web Framework mới với chú trọng vào cấu trúc tách rời với thiết kế đơn giản và dễ hiểu. Hiện tại thì Lotus vừa re...
My Mai viết hơn 3 năm trước
21 8
White
19 9
Tham gia cộng đồng Thoáng đó cũng đã 2 năm từ lúc tớ tham gia cộng đồng Ruby Việt Nam. Giờ ngồi ngẫm lại được gì và mất gì :v Thật thì chẳng mất...
My Mai viết 2 năm trước
19 9
Bài viết liên quan
White
8 6
Chưa xem phần 2? Xem (Link) Trong bài viết này tôi giới thiệu cho các bạn về khái niệm function arity, một cách gọi mĩ miều của số lượng argument ...
Lơi Rệ viết 3 năm trước
8 6
White
8 1
Tiếp theo (Link) Mình sẽ hướng dẫn cách test căn bản cho API mình tạo. Thật ra mà nói thì mình phải viết test trước khi làm nhưng mà để tránh việc...
My Mai viết hơn 3 năm trước
8 1
White
4 2
__Chú thích__: Đây là bản dịch tiếng Việt của bài viết gốc của tôi. Nếu bạn muốn xem bản tiếng Anh, xin hãy trỏ tới URL (Link) Lời mở (Link) là ...
Lơi Rệ viết hơn 3 năm trước
4 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
34 bài viết.
187 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!