ホーム DoRuby rubyで抽象メソッドを表現する
rubyで抽象メソッドを表現する
 

rubyで抽象メソッドを表現する

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

rubyについて調べていたら抽象クラス/メソッドをサポートしていないようでした。
ですが抽象メソッドのようなものを簡単に表現できるようなのでそれを紹介したいと思います。


オーバーライドしなきゃエラー!


抽象メソッドはオーバーライドを強制するのが目的なので、オーバーライドされてなければエラーする形で実装してやれば表現できます。

class GameObject

  # GameObjectを継承した描画の実行はこれを呼び出す
  def draw
    draw_proc
  end

  # これを子クラスでオーバーライドしないと
  # drawから呼ばれてエラーになる
  def draw_proc
    raise "call abstract !"
  end

end


class Circle < GameObject
  def draw_proc
    puts "丸だよ"
  end
end


class Box < GameObject
  def draw_box
    puts "四角だよ"
  end
end
circle = Circle.new
circle.draw
=> 丸だよ

box = Box.new
box.draw
=> RuntimeError: call abstract !

draw_procを継承していないBoxクラスから描画メソッドを呼び出したらちゃんとエラーを出してくれました。


おわりに


rubyでプログラミングしていて「これエラーにならないんだ」と思うところが多々ありました。
それもそのはずで、そもそもrubyの設計思想がストレスなくプログラムを楽しめるようにといったものらしいのですが、c++を使っていた自分からするとある程度縛りの効いたルールがある方が安心して動けるので、この記事を書くに至ったわけです。
でもせっかく自由に楽しくがモットーの言語なのにそれを制限するのも変な感じがするので自由さを生かすような設計をしていきたいですね。

記事を共有

最近人気な記事