Login
Immutable PageDiscussionInfoAttachments
Diff for "alstamber/2013FreshmanRubySeminar5"

MMA
Differences between revisions 5 and 6
Revision 5 as of 2013-06-07 17:10:08
Size: 2444
Editor: alstamber
Comment:
Revision 6 as of 2013-06-11 19:36:44
Size: 3184
Editor: alstamber
Comment:
Deletions are marked like this. Additions are marked like this.
Line 54: Line 54:
クラスメソッドは次のようにしても定義できます。

{{{#!highlight ruby
def Hoge
    class << Hoge
        def f
            (処理)
        end
    end
end
}}}

この定義の仕方についてより詳しく知りたい人は「特異クラス」でググってください。
Line 55: Line 69:
今までクラスは特にお互い関係なく別個に存在するものとして扱ってきました。しかし現実は違います。<<BR>>
ここではクラス同士がお互いにどのような関係を持っているのかについて見ていきましょう。

実はクラス同士には親子関係といえるような関係が存在します。親子というのはどういうことでしょうか。

クラスもオブジェクト

クラスはオブジェクトを作るための設計図だという話をしました。
ここで驚くべき話があります。実はRubyではクラスもまたオブジェクトなのです!!!!!

RubyではクラスはClassというクラスのインスタンスになっています。

となると当然疑問が湧いてきます。Classというクラスはどのクラスからつくられているの?という疑問です。
答えを正確に説明するのは難しいのですが、ここではClassというクラスのインスタンスは自分自身から作られている、という説明にとどめておきます。

クラスインスタンス変数

クラスもやっぱりオブジェクトなので、今までみてきたオブジェクトと同じように変数を持ったりメソッドを持ったりできます。
最初に、クラス自体のインスタンスが持っている変数についてみていくことにしましょう。

クラス自体のインスタンスが持っている変数をクラスインスタンス変数といいます。そのまんまですね。

クラスインスタンス変数の作りかた

クラスインスタンス変数を作るには次のようにします。

   1 class Hoge
   2     @a = (初期値)
   3 end

ただのインスタンス変数となにが違うのかみてみましょう。

   1 class Hoge
   2     @a = (初期値)
   3 
   4     def f
   5         @b = (初期値)
   6     end
   7 end

インスタンスメソッドの中で定義されるとインスタンス変数になり、外で定義されるとクラスインスタンス変数になります。

クラスメソッド

次はメソッドの話です。クラスも通常のオブジェクトと同じようにメソッドを持つことができます。
このようなメソッドをクラスが持っているメソッドなのでクラスメソッドといいます。

クラスメソッドの定義

クラスメソッドは次のように定義します。

   1 def Hoge
   2     def Hoge.f
   3         (処理)
   4     end
   5 end

メソッド名の頭にクラス名を書けばよいことがわかりますね。

クラスメソッドは次のようにしても定義できます。

   1 def Hoge
   2     class << Hoge
   3         def f
   4             (処理)
   5         end
   6     end
   7 end

この定義の仕方についてより詳しく知りたい人は「特異クラス」でググってください。

クラスには親子関係がある

今までクラスは特にお互い関係なく別個に存在するものとして扱ってきました。しかし現実は違います。
ここではクラス同士がお互いにどのような関係を持っているのかについて見ていきましょう。

実はクラス同士には親子関係といえるような関係が存在します。親子というのはどういうことでしょうか。

Objectクラス

alstamber/2013FreshmanRubySeminar5 (last edited 2013-06-12 13:47:38 by alstamber)