スキップしてメイン コンテンツに移動

Ruby継承でDRY実現

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キーワードは、柔軟で拡張性の高い設計を実現するための重要なツールです。

この記事はAIによって作成されました。

コメント