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?

More than 1 year has passed since last update.

【Ruby】クラス定義についてサクッと解説!

Posted at

内容

Rubyにおけるクラス定義はオブジェクト指向プログラミングの核心部分です。この記事では、基本的なクラス定義から継承、クラス式の評価順序に至るまでを掘り下げていきます。

基本のクラス型

class Foo
  def initialize(a)
    @a = a
  end

  def method1
    @a
  end
end

foo1 = Foo.new(1)
foo2 = Foo.new(2)
p foo1.method1 # 出力: 1
p foo2.method1 # 出力: 2

initialize メソッドではインスタンス変数 @a に引数 a を代入しており、method1 ではこのインスタンス変数を返すように定義されています。

クラスへの代入

a = Foo
b = a.new(1)
p b.method1 # 出力: 1

クラス自体もオブジェクトであり、変数に代入して操作することができます。

クラス式の評価順序

p 1 # 出力: 1

class Hoge
  p 2 # 出力: 2
end

p 3 # 出力: 3

この例では、クラス定義の内外でのコードの実行順序を示しています。

インスタンスのクラスを調べる

p foo1.class # 出力: Foo

オブジェクトがどのクラスのインスタンスであるかを調べる方法です。

継承クラス

class FooExt < Foo
  def initialize(a, b)
    @b = b
    super a
  end

  def method2(c)
    @a + @b + c
  end
end

fooExt = FooExt.new(3, 4)
p fooExt.method1 # 出力: 3
p fooExt.method2(5) # 出力: 12

FooExt クラスは Foo クラスを継承しており、initialize メソッドでは super を用いて親クラスのコンストラクタを呼び出しています。このクラスは、追加のインスタンス変数 @b を導入し、新しいメソッド method2 を定義して、@a@b、および追加の引数 c の合計を計算します。

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?