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】superを使うメリット

Posted at

【Ruby】superを使うメリット

Rubyのsuperについて

super は子クラス(サブクラス)のメソッド内から親クラスの同名のメソッドを呼び出すために使用されます。これにより、親クラスの振る舞いを再利用しつつ、子クラス(サブクラス)での独自の振る舞いを追加することができます。

superの使用例

class Parent
  def greet(message)
    puts "From Parent: #{message}"
  end
end

class Child < Parent
  def greet(message)
    super(message)  # ここで親クラスの greet メソッドが呼び出される
    puts "From Child: #{message}"
  end
end

child = Child.new
child.greet("Hello!")

# From Parent: Hello!
# From Child: Hello!

superを使うメリット

Rubyのsuperキーワードを利用することには、多くのメリットが存在します。以下に、その主な利点をいくつか紹介します。

1. コードの再利用

親クラスのメソッドの一部機能を、子クラス(サブクラス)で再実装することなく継承し、拡張やカスタマイズが可能です。

2. DRY (Don't Repeat Yourself) になる

コードの重複を最小限に抑えることができ、結果的に保守性が向上します。

3. カプセル化の保持

サブクラスは親クラスの内部実装を知る必要がありません。親クラスの提供する公開インターフェースのみを利用することで、カプセル化の原則が維持されます。

class Vehicle
  attr_reader :color, :wheels

  def initialize(color, wheels)
    @color = color
    @wheels = wheels
  end

  def describe
    "This is a #{color} vehicle with #{wheels} wheels."
  end
end

class Car < Vehicle
  attr_reader :brand

  def initialize(color, brand)
    super(color, 4)  # ここでVehicleのinitializeメソッドを呼び出している
    @brand = brand
  end

  def describe
    "#{super} It's a #{brand} brand."  # superでVehicleのdescribeメソッドを呼び出す
  end
end

car = Car.new("red", "Toyota")
puts car.describe

# This is a red vehicle with 4 wheels. It's a Toyota brand.

4. 変更の容易性

親クラスのメソッドに変更が加えられた際、superを利用しているサブクラスも自動的にその変更を受け取ります。これにより、変更の追従が容易となります。

5. 一貫性の保持

サブクラスで特有の動作を加えつつも、親クラスの基本的な動作をsuperを使用することで維持することができます。

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?