Ruby継承でDRY実現
Ruby基礎とオブジェクト指向の概要
Rubyは完全なオブジェクト指向言語で、すべてがオブジェクトです。クラスはオブジェクトの設計図であり、インスタンスはその実体です。Ruby基礎を押さえることで、後に登場する継承やオーバーライドといった高度な機能をスムーズに理解できます。
継承とスーパークラス・サブクラス
継承はサブクラスがスーパークラスの機能を引き継ぐ仕組みです。サブクラスはスーパークラスのメソッドや属性をそのまま使えるため、コードの再利用が容易になります。以下は簡単な例です。
class Animal
def speak
puts "Some sound"
end
end
class Dog < Animal
# DogはAnimalのspeakメソッドをそのまま使える
end
Dog.new.speak # => "Some sound"
このように、class Dog < Animal の構文でスーパークラスを指定します。サブクラスはスーパークラスの機能を拡張したり、オーバーライドしたりできます。
<演算子と比較演算
Rubyでは数値や文字列の比較に < 演算子を使います。<演算子 は「左側が右側より小さい」ことを判定します。文字列の場合は辞書順で比較されます。
5 < 10 # => true
"apple" < "banana" # => true
比較演算子は条件分岐やソートで頻繁に使われるため、正しく使いこなすことが重要です。
機能引き継ぎとDRY原則
継承を利用すると、共通の機能をスーパークラスにまとめることでコードの重複を減らせます。これはDRY(Don’t Repeat Yourself)原則に沿った設計です。例えば、複数の動物クラスで共通のメソッドをスーパークラスに置くと、以下のように簡潔に書けます。
class Animal
def initialize(name)
@name = name
end
def greet
puts "#{@name} says hello!"
end
end
class Cat < Animal; end
class Bird < Animal; end
Cat.new("Misty").greet # => "Misty says hello!"
Bird.new("Tweety").greet # => "Tweety says hello!"
この例では、greet メソッドをスーパークラスに置くことで、サブクラスごとに同じコードを書く必要がなくなります。
オーバーライドとsuperキーワード
サブクラスでスーパークラスのメソッドを再定義することをオーバーライドと言います。オーバーライドしたメソッド内でスーパークラスの同名メソッドを呼び出したい場合は super キーワードを使います。
class Animal
def speak
puts "Some sound"
end
end
class Dog < Animal
def speak
super # スーパークラスのspeakを呼び出す
puts "Woof!"
end
end
Dog.new.speak
# => "Some sound"
# => "Woof!"
このように super を使うことで、スーパークラスの機能を保ちつつ追加の処理を行うことができます。オーバーライドとsuperキーワードは、柔軟で拡張性の高い設計を実現するための重要なツールです。
コメント
コメントを投稿