🌟

Rubyの`send`メソッドを理解する

2023/08/15に公開

Rubyのsendメソッドはオブジェクト指向のパワフルなツールの1つであり、動的にメソッドを呼び出す際に非常に役立ちます。この記事では、sendメソッドの基本的な使用方法と、それを利用した動的なメソッド呼び出しについて解説します。

sendメソッドとは?

sendはRubyのオブジェクトのメソッドで、メソッド名を文字列またはシンボルとして動的に指定して、そのメソッドを呼び出すことができるものです。

基本的な使用例

class Greeting
  def hello
    "Hello, World!"
  end
end

greet = Greeting.new

# 通常のメソッド呼び出し
puts greet.hello  # => "Hello, World!"

# sendを使用したメソッド呼び出し
puts greet.send(:hello)  # => "Hello, World!"

動的なメソッド呼び出し

sendの真骨頂は、動的にメソッド名を生成して呼び出すことができる点にあります。

例えば、属性名に応じて異なるgetterメソッドを呼び出すシチュエーションを考えてみましょう。

class Person
  attr_accessor :name, :age

  def initialize(name, age)
    @name = name
    @age = age
  end
end

person = Person.new("Alice", 30)

attributes = ["name", "age"]

attributes.each do |attr|
  value = person.send(attr)
  puts "#{attr.capitalize}: #{value}"
end

# Output:
# Name: Alice
# Age: 30

上記の例では、attributes配列の各要素を用いて動的にgetterメソッドを呼び出しています。

注意点

  • sendメソッドは非常にパワフルなため、不適切な使用はプログラムの安全性を損なう可能性があります。
  • 予期しないメソッドが呼び出されることを避けるため、sendを使用する際には常に入力を検証することが重要です。

まとめ

Rubyのsendメソッドは、動的なメソッド呼び出しのニーズに対応するための強力なツールです。ただし、その強力さゆえに注意深く使用する必要があります。適切に使用することで、コードの柔軟性と可読性を向上させることができます。

Discussion