クラスを作る。

夏にクラスと聞くと同時に「ナインティーン、ナインスリー」と歌が聞こえてくる30歳の男です。こんばんは。
そんなことはどうでもいいので、早速クラスを作ってみます。

# クラス名は必ず大文字始まり
class Hoge
  # インスタンス変数は@付き
  @x = 0
  @y = 0
  @z = 0
  
  # インスタンス変数に対するアクセサ
  # attr_accessorは読み書き可能
  # attr_readerとすると読み取り専用
  # attr_writerとする書き込み専用
  attr_accessor:x
  attr_accessor:y

  # attrは普通にメソッドとして書くことも可能
  def z=(value)
    @z = value
  end

  def z
    return @z
  end
  
  # コンストラクタ
  # 名前はinitialize固定
  def initialize(x, y)
    @x = x
    @y = y
  end

  # メソッド
  # 何も指定しないと外から使えるpublic
  def huga
    p @x, @y
  end

  # メソッド定義の下にあるprivate:hajiで外からのアクセスを禁止
  def haji
    return @x + @y
  end
  private:haji

  # protectedメソッド、継承先のクラスでは使用可能
  def hegi
    return @x * @y
  end
  protected:hegi

  def call_haji_hegi
    # privateメソッドは何もつけずにメソッド名だけで呼び出す
    # protectedメソッドはselfと指定が可能
    p haji + self.hegi
  end

  # クラスメソッド
  # self.huguとすることも可能
  def Hoge.hugu
    p "Hoge.hugu"
  end
end

いろんな要素を入れたら長くなってしまった。
何はともあれ使ってみる。

hoge = Hoge.new(1, 2)
hoge.huga
hoge.z = 3
p hoge.z
Hoge.hugu
hoge.call_haji_hegi

結果。

1
2
3
"Hoge.hugu"
5

クラスの定義、私が知っているオブジェクト指向型言語のクラスとほとんど同じなので、すんなりと覚えられた。
気になる点としては、こんなところ。

  • メソッドが何もしないとpublicになるのはちょっと居心地が悪い
  • privateメソッドを呼ぶ際、selfと付けられないのは何でだろうか
  • attr_accessorは便利だけど勝手に外から読み書きされるのは居心地が悪いのであまり使わなさそう
    • って、自分しか使わないのに何を言っているのだ、仕事で人から使われるクラスをたくさん書いているからこうなるのだ

何はともあれ、これでそれなりに言語仕様は勉強できたと思うので、モジュールを探索したり、俺スクリプトを書いていきたいと思っている今日この頃です。


Ruby プログラミング基礎講座

Ruby プログラミング基礎講座