11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【備忘録】【Rails】initializeメソッドの使い方

Last updated at Posted at 2022-11-03

自分用のメモです。

initializeメソッドとは(一言で)

  • コンストラクタのこと。

コンストラクタとは

  • オブジェクトを生成した際に1度だけ実行される機能を指す名称。
  • なお、オブジェクトが生成された際にのみ実行されることから、そのオブジェクト内で共通に使えるインスタンス変数の初期化などに使われる。
  • ただしクラスを定義した際、コンストラクタを必ず作る必要はない。
  • コンストラクタが定義されていなくてもオブジェクトを生成できる。
  • また、Rubyではオブジェクトを生成するnewメソッドの引数を利用して、コンストラクタによる変数の初期化も可能。

initializeメソッドの特徴

  • initializeメソッドを定義しておくと、インスタンス生成時に必ず実行したい処理をメソッドを呼び出すことなく実行することができる。
  • 例えば次の例では、initializeメソッドの中でインスタンス変数の初期化を行っている。
class Car
  def initialize()
    @name = "未定義"
  end
end

car = Car.new()
  • こうすることで、Car.newでインスタンスを生成したあとでメソッドを呼び出す記述をしなくても自動的にメソッドを呼び出してくれるので便利。
  • initializeメソッドを使わない場合は、このように書かないといけない。
class Car
  def init()
    @name = "未定義"
  end
end

car = Car.new()
car.init()

引数を渡すこともできる

class Hello
  # 名前を保持するクラス変数
  @name = nil
  
  # クラスの初期化メソッド
  def initialize(name)
    @name = name
  end
  
  # クラスのインスタンスメソッド
  def talk
    puts "hello, #{@name}"
  end
  
end
 
# classのnewメソッドに引数を渡す
hello = Hello.new("asami")
 
# newメソッドからinitializeメソッドに渡って初期化された名前が使用される
hello.talk

この場合、initializeメソッドを呼びだす時(インスタンス生成時)に引数を指定して呼び出すことになるから、メソッドに値を渡すことができる。
そしてメソッドの中で、"asami" が @name に代入される。
最後にインスタンス変数であるhelloに対してtalkメソッドを実行しているので、以下が出力される。

出力結果
hello, asami

参考にさせていただいた記事

initializeメソッドの使い方

【Ruby入門】classのnewとinitializeについてまとめ

11
5
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
11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?