うめすこんぶ

日々のプログラミングで残しておきたいメモ.何かの役に立てれば幸いです.

rubyのクラス定義の文法をまとめた

スポンサーリンク

rubyのクラス定義の方法をまとめました。

クラスの定義

以下のようにします。

class Rect                      # クラス定義
  @height = 0                   # インスタンス変数
  @width = 0
  @@HeightMax = 320             # クラス変数
  @@WidthMax = 320
  
  def initialize(height, width) # クラスメソッド
    @height = height
    @width = width
  end
  
end

ここでは四角形を表すRectクラスを定義しています。内部にheight, widthと、高さと幅を表す変数を保持。

また、クラスのメソッドinitializeを定義。initializeという名前のついたメソッドは、特殊で、C++Javaでいうコンストラクタに該当します。インスタンス生成後に自動で呼び出されます。

インスタンスの生成

クラス名.new()で生成。new()のカッコの中身は、initializeメソッドの引数を入れましょう。

r = Rect.new(20,20)
p r     # => #<Rect:0x1bdf488 @height=20, @width=20>

継承

簡易な記述で継承も行えます。javaだとextendsでしたが、それがrubyだと<の1文字。 今回は、色付きの四角形ColorRectを定義。新たに変数colorを追加しています。

また、継承元のメソッドを書き直すことも出来ます。以下ではinitailizeメソッドを書き直しています。その中で、継承元メソッドをそのまま使いたいときは、superを使用します。今回は、heightやwidthの代入は継承元のinitalizeと同じなので、記述を簡便にするためsuperを代用。あとは、新しくcolorの代入だけをかけばOKです。

class ColorRect < Rect          # Rectクラスを継承
  @color = "rbg(2,34,22)"
  
  def initialize(height, width, color)
    super(height, width)        # 継承元のinitialize()を使用
    @color = color
  end
end

cr = ColorRect.new(20,30,"rbg(255,255,255)")
p cr # => #<ColorRect:0x1bdf398 @height=20, @width=30, @color="rbg(255,255,255)">