本文へスキップ
BecomeCoder

Rubyコース · 第7章 クラスとオブジェクト指向 · レッスン30

クラスとインスタンス ― initializeと@変数

ブラウザで完結

導入

「犬」という概念があって、そこから「ポチ」「ハチ」といった個々の犬(インスタンス)が作られる――そんな「型」と「実体」の関係をプログラムで表現するのがクラスです。

説明

class クラス名 ... end でクラスを定義します。initialize は、そのクラスから newオブジェクトを作るときに自動的に呼ばれる特別なメソッドです。

class Dog
  def initialize(name)
    @name = name
  end

  def bark
    puts "#{@name}: ワン!"
  end
end

pochi = Dog.new("ポチ")
pochi.bark

hachi = Dog.new("ハチ")
hachi.bark
  • Dog.new("ポチ") を呼ぶと initialize(name) が実行され、@name = "ポチ" が設定された新しい Dog オブジェクトができます。
  • @name のように @ で始まる変数インスタンス変数と呼ばれ、そのオブジェクトの中でずっと保持される値です。他のメソッド(bark など)からも @name を参照できます。
  • pochihachi はそれぞれ別々の @name を持つ、別々のオブジェクトです。

やってみよう

Dog クラスに新しい犬(例えば taro = Dog.new("太郎"))を作って、それぞれの bark を呼んでみましょう。initialize の引数を増やして(例えば age)、新しい @変数 を追加してみるのもよい練習です。

演習

Cat クラスを定義し、initialize(name)@name を設定し、meow メソッドで "#{@name}: ニャー" と表示してください。Cat.new("タマ") を作って meow を呼び出してください。

ヒント1を見る

class Cat def initialize(name) @name = name end def meow puts "#{@name}: ニャー" end end のように書きます。

ヒント2を見る

Cat.new("タマ").meow のように続けて呼ぶこともできます。

実際に動かしてみよう

下のエディタにRubyを書いて「実行」を押すと、学習用シミュレータが puts / print / p の出力を表示します(本物のRubyではなく、教材の範囲を再現した軽量な自作エンジンです)。配列・ハッシュ・ブロック(each/map/select)・メソッド・クラス・モジュール・例外なども動きます。本文の例を書き換えて動かしてみましょう(gem・Rails・ファイル入出力など一部の機能は対象外です。文字列を伸ばすときは str << も可能ですが、変数に反映されるのは str += です)。

Ruby — ブラウザ内で実行(学習用シミュレータ)

Rubyの教材サブセットを動かす学習用シミュレータを読み込みます(本物のRubyではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。