Rubyメモ

クラス

最終更新:

匿名ユーザー

- view
管理者のみ編集可

クラスの定義

class クラス名 < 親クラス
  ....
end

クラス名は半角英大文字で始まる名前にする必要あり。
(実はRuby的にはクラス名=定数らしい。)


コンストラクタ

initializeという名前のメソッドで定義

class Point
  def initalize(x,y)
    @x = x
    @y = y
  end
end

デストラクタは無い。#まあガベコレしてくれるんで要らないだろうな。
webで検索すると以下のようなやり取りが。

|2. C++ のデストラクタのようなものは Ruby ではどのように書くのでしょうか。
|   C での拡張モジュール中では、Data_Make_Struct() の第4引数で関数を指定
|   できるようですが、Ruby で作成したクラスの場合、どのように書くのか
|   わかりませんでした。

RubyレベルではGCがあるので,明示的にオブジェクトを破棄する必
要はあまりないはずです.どーしても,GCのタイミングでなんらか
の処理が行いたい場合には lib/final.rb を使うワザはありますけ
どね.実例としては lib/tempfile.rb を参照して下さい.でも,
分かるかなあ.必要でしたら更に解説します.


メンバ変数

インスタンス変数には@で始める。
@value1
クラス変数は@@で始める。
@@value2


アクセッサメソッド

JavaでsetFoo(),getFoo()というメソッドを使ってメンバ変数fooにアクセスするようにするけど、Rubyはattr_accesstor(set/get),attr_reader(get),attr_writer(set)を使って実現できる。

class Point
  def initalize(x,y)
    @x = x
    @y = y
  end

 attr_accessor :x
 attr_accessor :y
end

p1 = Point.new(1,1)
puts p1.x

:とxの間にスペースを入れると構文エラーになる。これ以外にもなぜだかRubyはスペースの入れ方にうるさい箇所が多い。

クラスメソッド

クラス名.メソッド名になる

class Rectangle 
  ....
  #四角形の角の数を返す
  def Rectangle.getApexCount
      return 4;
  end
end

インスタンス生成

Javaだと new クラス名()だけど、Rubyはクラス名.new()で生成する。

a1 = Point.new
人気記事ランキング
目安箱バナー