【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
を使用することで維持することができます。