クラスを作る。
夏にクラスと聞くと同時に「ナインティーン、ナインスリー」と歌が聞こえてくる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は便利だけど勝手に外から読み書きされるのは居心地が悪いのであまり使わなさそう
- って、自分しか使わないのに何を言っているのだ、仕事で人から使われるクラスをたくさん書いているからこうなるのだ
何はともあれ、これでそれなりに言語仕様は勉強できたと思うので、モジュールを探索したり、俺スクリプトを書いていきたいと思っている今日この頃です。
- 作者: 広瀬雄二
- 出版社/メーカー: 技術評論社
- 発売日: 2006/01/13
- メディア: 単行本(ソフトカバー)
- クリック: 9回
- この商品を含むブログ (41件) を見る