LoginSignup
1
0

More than 5 years have passed since last update.

Rubyのクラスまとめ

Last updated at Posted at 2017-10-09

Rubyのクラスについてまとめます。

インスタンスとインスタンスメソッド

クラスからインスタンスを生成するにはnewメソッドを使用します。
クラス内に定義したメソッドはそのインスタンスから呼び出せます。このメソッドをインスタンスメソッドと言います。
クラスにはインスタンスメソッドとしてinitializeが用意されており、インスタンス化時の処理をここに書くことができます。(不要な場合は省略可)

class Foo
  def initialize
    p 'initialize!!!'
  end

  def sample_method
    p 'sample_method!!!'
  end
end

foo = Foo.new # => "initialize!!!"
foo.sample_method # => "sample_method!!!"

インスタンス変数

  • インスタンス内でのみ参照可能な変数で状態を保持できる
  • 外から参照するにはアクセサを定義する必要がある
  • インスタンス変数の定義は@barのように先頭に@を付ける
class Foo
  def initialize
    @bar = 'instance!!!'
  end

  def sample_method
    p @bar
  end
end

foo = Foo.new
foo.sample_method # => "instance!!!"

インスタンス変数に外部からアクセスする

インスタンス変数に外部からアクセスするには以下のメソッドを追加する必要があります。

  • 代入するメソッド
    • Foo#bar=
  • 参照するメソッド
    • Foo#bar
class Foo
  def bar=(value)
    @bar = value
  end

  def bar
    @bar
  end
end

foo = Foo.new
foo.bar = 'instance!!!' # syntax sugarが用意されており、foo.bar= と書かなくても代入のように書ける
foo.bar # => "instance!!!"

これを簡単にしたのがattr_accessorでアクセサと呼ばれます。
アクセサを用いることで、上記のようにわざわざメソッドを定義しなくてもこれだけで外部からインスタンス変数を使用することができます。実態はFoo#bar=メソッドやFoo#barメソッドをattr_accessorが作っているのです。

class Foo
  attr_accessor :bar # 引数は可変長のため複数定義が可能 => attr_accessor :bar_a, :bar_b
end

foo = Foo.new
foo.bar = 'instance!!!'
foo.bar # => "instance!!!"

クラスメソッド

インスタンス化せずともクラスに対して直接メソッドを呼び出すことができます。
クラスメソッドの定義はself.sample_method のようにself. をメソッド名の前につけます。

class Foo
  def self.sample_method
    p 'class method!!!'
  end
end

Foo.sample_method # => "calss method!!!"

また以下のように class << self..end の中にメソッドを定義することでも、クラスメソッドとなります。こうすることで複数まとめてクラスメソッドを定義でき、ネストすることでインスタンスメソッドとの区別が明確になります。

class Foo
  class << self
    def method_bar
      p 'class method bar!!!'
    end

    def method_baz
      p 'class method baz!!!'
    end
  end
end

Foo.method_bar # => "calss method bar!!!"
Foo.method_baz # => "calss method baz!!!"
1
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
1
0