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?

クラスメソッドとは

Last updated at Posted at 2024-11-13

そのクラスに関連が深いものの、一つ一つのインスタンスに含まれるデータは使わないメソッドを定義したい場合があります。そのような場合はクラスメソッドを定義した方が使い勝手が良くなります。

クラスメソッドの呼び出し方

クラスメソッドを呼び出す場合は以下のように、クラス名の直後にドット(.)を付けてメソッドを呼び出します。
クラス名.メソッド名

クラスメソッドの書き方

class クラス名
  def self.クラスメソッド
     # クラスメソッドの処理
  end
end
class クラス名
  class << self
    def クラスメソッド
      # クラスメソッドの処理
    end
  end
end

メソッド名の表記法について

Rubyではインスタンスメソッドを表す場合に、クラス名#メソッド名と書くことがあります。例えばString#to_iであれば、「Stringクラスのto_Iというインスタンスメソッド」と表します。
 また、クラスメソッドの場合はクラス名.メソッド名(またはクラス名::メソッド名)と書きます。例えばFile.exit?(またはFile::exist?)であれば、「Fileクラスのexit?というクラスメソッド」を表します。

  • File.exit?、File::exist?というクラスメソッドの呼び出し方がある
irb(main):001* class User
irb(main):002*   def initialize(name)
irb(main):003*     @name = name
irb(main):004*   end
irb(main):005*
irb(main):006*   def self.create_users(names)
irb(main):007*     names.map do |name|
irb(main):008*       User.new(name)
irb(main):009*     end
irb(main):010*   end
irb(main):011*
irb(main):012*   def hello
irb(main):013*     "Hello, I am #{@name}."
irb(main):014*   end
irb(main):015> end
=> :hello
irb(main):016> names = ["Alice", "Bob", "Carol"]
=> ["Alice", "Bob", "Carol"]
irb(main):017> users = User.create_users(names)
=> [#<User:0x0000000108bc4fb8 @name="Alice">, #<User:0x0000000108bc4f68 @name="Bob">, #<User:0x0000000108bc4f40 @name="Carol">]
irb(main):018* users.each do |user|
irb(main):019*   puts user.hello
irb(main):020> end
Hello, I am Alice.
Hello, I am Bob.
Hello, I am Carol.
=> [#<User:0x0000000108bc4fb8 @name="Alice">, #<User:0x0000000108bc4f68 @name="Bob">, #<User:0x0000000108bc4f40 @name="Carol">]
irb(main):036* class User2
irb(main):037*   def initialize(name)
irb(main):038*     @name = name
irb(main):039*   end
irb(main):040*   class << self
irb(main):041*     def create_users(names)
irb(main):042*       names.map do |name|
irb(main):043*         User.new(name)
irb(main):044*       end
irb(main):045*     end
irb(main):046*   end
irb(main):047*   def hello
irb(main):048*     "Hello, I am #{@name}."
irb(main):049*   end
irb(main):050> end
=> :hello
irb(main):051> names = ["Alice", "Bob", "Carol"]
=> ["Alice", "Bob", "Carol"]
irb(main):052> names2 = ["Alice", "Bob", "Carol"]
=> ["Alice", "Bob", "Carol"]
irb(main):053> users = User2.create_users(names2)
=> [#<User:0x00000001089bdee0 @name="Alice">, #<User:0x00000001089bdeb8 @name="Bob">, #<User:0x00000001089bde90 @name="Carol">]
irb(main):054* users.each do |user|
irb(main):055*   puts user.hello
irb(main):056> end
Hello, I am Alice.
Hello, I am Bob.
Hello, I am Carol.
=> [#<User:0x00000001089bdee0 @name="Alice">, #<User:0x00000001089bdeb8 @name="Bob">, #<User:0x00000001089bde90 @name="Carol">]

  • 試しに書いてみたが同じように動作した
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?