0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Ruby】メソッドとは

Last updated at Posted at 2024-10-25

はじめに

こんにちは、現在アメリカの大学に行って語学を学びながらソフトウェアエンジニアになるために独学で勉強しているものです。
本日はRubyを勉強しているとよく出てくる、メソッドについて整理していきます。
というのも、現在progate→ゼロから分かるRuby→たのしいRubyと段階を追って勉強しているのですが、メソッドを深堀したり自分の中での定義を確立する機会がありませんでした
改めて時間をとってメソッドについてまとめていきたいと思います。

メソッド

メソッドは、オブジェクトに対して行える処理や動作を定義するものです。
Rubyではメソッドはオブジェクトの動作を記述し、オブジェクトに対して呼び出すことができます。
Rubyのメソッドは、基本的に「メソッド名と引数を受け取って、特定の処理を行い、結果を返すもの」として機能します。
また、メソッドは大きく3つの種類に分類されます。

  • 関数メソッド
  • インスタンスメソッド
  • クラスメソッド

関数メソッド

Rubyでは、特定のクラスに属さないメソッドを定義することもできます。
これを関数メソッドと呼び、トップレベルで定義されたメソッドとして機能します。
つまり、オブジェクトやクラスに属するのではなく、どこからでも呼び出すことができるようなメソッドです。

method.rb
# メソッドの定義
def greet(name)
  "Hello, #{name}!"
end

# メソッドの呼び出し
puts greet("Alice")  # => "Hello, Alice!"

上記の例では、greetというメソッドが引数nameを受け取り、それを使って挨拶文を生成して返しています。
ちなみにAliceを実引数、greet(name)nameを仮引数といいます。
これらの説明が聞きたい方はこちらの記事をどうぞ

インスタンスメソッド

method2.rb
class Animal
  def initialize(name)
    @name = name  # インスタンス変数に名前を保存
  end
  
  def speak
    puts "#{@name} is making a sound!"
  end
end

# Animalクラスのインスタンスを生成
dog = Animal.new("Dog")
cat = Animal.new("Cat")

# インスタンスメソッドを呼び出す
dog.speak  # => Dog is making a sound!
cat.speak  # => Cat is making a sound!

class内のメソッドをインスタンスメソッドといい、下記でいうとAnimalクラス内に定義されたinitializespeakメソッドを指し、単なるメソッドと呼び出しの方法が異なります。
例えば、dog.speakという呼び出しで、dogインスタンスの@name変数を利用して「Dog is making a sound!」というメッセージが表示されます。
同様に、cat.speakで「Cat is making a sound!」となります。

ここで上記コードの理解度を深めるために補足説明ですが、Animalクラスでは、initializeという特殊なメソッドが定義されています。
initializeメソッドはクラスからインスタンスが生成されたときに自動的に呼び出されるメソッドで、インスタンスごとに固有のデータをセットするために使われます。
この場合、@nameというインスタンス変数にDogCatといった名前を保存しています。
このインスタンス変数@nameは、そのインスタンスごとに異なる値を持つことができるため、異なる動作(speakメソッドで名前を使って出力される)をインスタンスごとに行うことが可能になります。

クラスメソッド

続いて、2つめのクラスメソッドについて説明していきます

class1.rb
class Animal
  def self.general_info
    puts "Animals are living creatures."
  end
end

# クラスメソッドを呼び出す
Animal.general_info  # => Animals are living creatures.

クラスメソッドはselfを使って定義され、インスタンスを生成する必要がありません。このメソッドはクラスそのものに対して呼び出されます。
インスタンスメソッドはインスタンス.メソッドでしたが、クラスメソッドの場合はクラス.メソッドであることとメソッドを定義する際にselfを忘れずにつけましょう。

補足

どうやら、クラスメソッドの場合はself.general_infoと記載するのではなく以下のようにするのが一般的なようです

compliment.rb
class Animal
  class << self
    def general_info
      puts "Animals are living creatures."
    end
    
    def common_traits
      puts "Animals need water and food to survive."
    end
  end
end

このように、class << selfのブロック内にまとめると、複数のクラスメソッドが並ぶことを示しやすくなるため、読み手にとっても「この部分はクラスメソッドの定義である」と直感的に理解しやすくなります。
また、クラスメソッドが変更しやすかったり(メンテナンス性向上),可読性の観点からこの方法が好まれるようです。

まとめ

この記事では、Rubyのメソッドについて基本的な知識を整理しました。
メソッドはオブジェクトの動作を定義する重要な要素であり、Rubyでは以下の3つに分類されます。

  • 関数メソッド
    クラスに属さず、トップレベルで定義されるメソッド。
  • インスタンスメソッド
    クラス内で定義され、特定のインスタンスに対して動作するメソッド。
  • クラスメソッド
    クラス自体に対して定義され、インスタンスを生成せずに利用できるメソッド。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?