Giới thiệu hàm Module#module_function
Ruby
106
White

Lơi Rệ viết ngày 23/05/2015

Trong Ruby, có 2 cách sử dụng method của module. Cách thứ nhất là 'nhúng' (mixin) và dùng như instance method và cách thứ hai là dùng theo kiểu module function. Sẵn tiện tôi cũng đưa ra 2 ví dụ cụ thể cách dùng:

Mixin và dùng như instance methods

module MyLibrary
  def hello
    puts "Hello world"
  end
end

class Greeter
  include MyLibrary
end

Greeter.new.hello # => Hello world

Các bạn có thể thấy là hàm #hello được gọi thông qua object của Greeter. Đây là cách phổ biến mà người viết Ruby hay dùng để chia sẻ code giữa các class với nhau thay vì dùng class inheritance.

module functions

Tương tự như cách sử dụng class methods, module cho phép gọi hàm với receiver là module. Xem ví dụ sau:

module MyLibrary
  def self.hello
    puts "Hello world"
  end
end

MyLibrary.hello # => Hello world

Xin lưu ý là tôi định nghĩa hàm này với từ khoá .self để chỉ ra là hàm này thuộc về module.

Kết hợp cả hai

Nếu bây giờ bạn có một hàm trong module và bạn vừa muốn nó được dùng trong mixin và vừa muốn dùng nó như module function thì làm thế nào? Cách đơn giản nhất là viết như sau:

module MyLibrary
  def self.hello
    puts "Hello world"
  end

  def hello
    MyLibrary.hello
  end
end

Các bạn có thể thấy cách tôi gọi ngược lại module function MyLibrary.hello. Nhưng có một cách khác đẹp hơn, đó là sử dụng hàm Module#module_function:

module MyLibrary
  def hello
    puts "Hello world"
  end

  module_function :hello
end

class Greeter
  include MyLibrary
end

Greeter.new.hello # => Hello world
MyLibrary.hello # => Hello world

Ruby cung cấp hàm trên với param là tên của method bạn muốn biến thành module_function.

Còn rất nhiều các hàm khác của Ruby giúp rút ngắn và làm code súc tích và dễ hiểu hơn. Tôi sẽ ráng viết thêm một số bài tương tự trong thời gian tới.

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

Lơi Rệ

43 bài viết.
206 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
65 12
Sự sống còn của các công ty kỹ thuật phụ thuộc vào nguồn nhân lực chất xám của họ. Thế nên rất thiết yếu cho việc đầu tư xây dựng team có khả năng ...
Lơi Rệ viết gần 2 năm trước
65 12
White
38 7
Trời se se lạnh, Melbourne chuyển mùa, ngồi trong quán cafe bắt đầu một ngày làm việc mới với suy nghĩ tại sao các bạn Việt Nam không muốn tham gia...
Lơi Rệ viết gần 3 năm trước
38 7
White
36 15
Thế nào là làm việc từ xa? Internet, một trong những phát minh vĩ đại nhất của con người thế kỷ 20. Công nghệ này xoả bỏ rào cản vật lý giữa các n...
Lơi Rệ viết 2 năm trước
36 15
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 hơn 2 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 2 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 gần 3 năm trước
4 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


White
{{userFollowed ? 'Following' : 'Follow'}}
43 bài viết.
206 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á!