Rubyのクラスとメソッド
目次
クラス定義
メソッド探索
Mix-in
特異クラス
クラスメソッド
クラス定義
Rubyのオブジェクト指向
Rubyはオブジェクト指向型言語
クラス、継承、モジュール等を使用出来る
Rubyは全てがオブジェクトで出来ている
例:クラス = Classクラスのオブジェクト
Classもオブジェクト
クラスもオブジェクトなので、変数へ格納出来る
 
class Foo
end
a = Foo # Fooクラスを変数へ格納
a.new(1) # Foo.newと同じように使用出来る
依存クラスの参照
インスタンスから生成元のクラスオブジェクトを参
照出来る
クラスオブジェクトから親クラスを参照出来る
class Foo
end
foo1 = Foo.new() # Fooのインスタンスを作成
foo2 = foo1.cla...
メソッド探索
メソッド
Rubyのメソッドは大きく2つ
インスタンスメソッド
クラスメソッド
インスタンスメソッド
インスタンスをレシーバとするメソッド
instance_methodsメソッドから一覧を取得可能
スーパークラスで定義されたインスタンスメソッド
も使用可能
Rubyの継承チェーン
ancestorsメソッドから継承チェーンを確認出来る
BasicObjectクラスは全てのクラスのスーパークラス
ほとんどのクラスはObjectクラス、Kernelモジュー
ルを継承
String Comparable...
メソッド探索
インスタンスは、呼び出されたメソッドが見つかるまで、
継承元クラスのインスタンスメソッドを探す。
最終的に見つからない場合、
BasicObject#method_missingメソッドを呼び出す。
Foo Object Kern...
Mix-InMix-InMix-InMix-In
Mix-in
クラスにモジュールをincludeする事
Rubyの継承は単一継承のみ許されている
複数の機能を継承したい時にMix-inを使用する。
モジュール
定義はクラスコードとほぼ同じで、class文の代わり
にmodule文を使う
クラスとの相違点
単独ではインスタンス化できない
クラスや他のモジュールにincludeできる
複数のクラスで適用したい機能をモジュールで定義
する
モジュールの継承チェーン
モジュールをincludeした場合、オブジェクトの継承
チェーンに無名クラスとして追加される。
この無名クラスはsuperclassメソッドからは参照出
来ない。
FooExt Bar Foo
class Foo
en...
特異クラス
特異クラス
特定のインスタンスからのみ参照される特別なクラ
ス
foo1 = Foo.new
def foo1.hoge # fooの特異クラスにhogeメソッドを定義
puts “hoge”
end
foo2 = Foo.new
foo1.h...
特異クラスの継承チェーン
メソッドを定義した際、元のクラスを継承した特異
クラスが生成される。
インスタンスは特異クラスのインスタンスのように
なる。
classメソッドからは特異クラスは参照出来ず、元の
クラスが返される。
#foo1 Foo...
再オープン
再オープン式
foo1 = Foo.new
class << foo1    # foo1を再オープン
def hoge
end
end
再オープン式を使って特異クラスを定義する事も出来る
extendメソッド
再オープンを使用して特異クラスへモジュールを
Mix-inする事が出来る。
特異クラスへのMix-inはよく使用する為、同じ動作をするextendメ
ソッドが用意されている。
foo1 = Foo.new(1)
class...
クラスメソッド
Classクラス
Ruby内でクラスを表すクラス
クラスはClassクラスのインスタンス
class Foo
end
Foo.class #=> Class
Foo = Class.new
Foo.class #=> Class
クラスメソッド
クラスオブジェクトをレシーバとするメソッド
クラスの特異クラスのメソッドとして定義
Foo = Class.new
def Foo.hoge
end
class Foo
def self.hoge
end
end
foo1 = ...
まとめ
Rubyはメソッドチェーンが大事。
オブジェクトモデルの解釈は多くある
他の解説も読んでみると理解が増す
参考・出典:Ruby 公式資格教科書、
Upcoming SlideShare
Loading in …5
×

Rubyのクラスとメソッド_エスキュービズム勉強会0530

319
-1

Published on

5月30日に開催されたエスキュービズム社内勉強会での資料になります。

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
319
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Rubyのクラスとメソッド_エスキュービズム勉強会0530

  1. 1. Rubyのクラスとメソッド
  2. 2. 目次 クラス定義 メソッド探索 Mix-in 特異クラス クラスメソッド
  3. 3. クラス定義
  4. 4. Rubyのオブジェクト指向 Rubyはオブジェクト指向型言語 クラス、継承、モジュール等を使用出来る Rubyは全てがオブジェクトで出来ている 例:クラス = Classクラスのオブジェクト
  5. 5. Classもオブジェクト クラスもオブジェクトなので、変数へ格納出来る   class Foo end a = Foo # Fooクラスを変数へ格納 a.new(1) # Foo.newと同じように使用出来る
  6. 6. 依存クラスの参照 インスタンスから生成元のクラスオブジェクトを参 照出来る クラスオブジェクトから親クラスを参照出来る class Foo end foo1 = Foo.new() # Fooのインスタンスを作成 foo2 = foo1.class.new() # foo1.classからインスタンスを作成 puts foo1.class == foo2.class #=> true class FooExt < Foo end puts FooExt.superclass == Foo #=> true
  7. 7. メソッド探索
  8. 8. メソッド Rubyのメソッドは大きく2つ インスタンスメソッド クラスメソッド
  9. 9. インスタンスメソッド インスタンスをレシーバとするメソッド instance_methodsメソッドから一覧を取得可能 スーパークラスで定義されたインスタンスメソッド も使用可能
  10. 10. Rubyの継承チェーン ancestorsメソッドから継承チェーンを確認出来る BasicObjectクラスは全てのクラスのスーパークラス ほとんどのクラスはObjectクラス、Kernelモジュー ルを継承 String Comparable Object Kernel BasicObject Integer Numeric Comparable Object Kenerl BasicObject Objectクラス・Kernelモジュール・Basic Objectクラスの メソッドは、ほとんどのクラスで使用可能。
  11. 11. メソッド探索 インスタンスは、呼び出されたメソッドが見つかるまで、 継承元クラスのインスタンスメソッドを探す。 最終的に見つからない場合、 BasicObject#method_missingメソッドを呼び出す。 Foo Object Kernel BasicObjec t Foo インスタンス
  12. 12. Mix-InMix-InMix-InMix-In
  13. 13. Mix-in クラスにモジュールをincludeする事 Rubyの継承は単一継承のみ許されている 複数の機能を継承したい時にMix-inを使用する。
  14. 14. モジュール 定義はクラスコードとほぼ同じで、class文の代わり にmodule文を使う クラスとの相違点 単独ではインスタンス化できない クラスや他のモジュールにincludeできる 複数のクラスで適用したい機能をモジュールで定義 する
  15. 15. モジュールの継承チェーン モジュールをincludeした場合、オブジェクトの継承 チェーンに無名クラスとして追加される。 この無名クラスはsuperclassメソッドからは参照出 来ない。 FooExt Bar Foo class Foo end module Bar end class FooExt < Foo include Bar end puts FooExt.superclass #=> Foo FooExt.superclass
  16. 16. 特異クラス
  17. 17. 特異クラス 特定のインスタンスからのみ参照される特別なクラ ス foo1 = Foo.new def foo1.hoge # fooの特異クラスにhogeメソッドを定義 puts “hoge” end foo2 = Foo.new foo1.hoge #=> “hoge” foo2.hoge #=> NoMethodError
  18. 18. 特異クラスの継承チェーン メソッドを定義した際、元のクラスを継承した特異 クラスが生成される。 インスタンスは特異クラスのインスタンスのように なる。 classメソッドからは特異クラスは参照出来ず、元の クラスが返される。 #foo1 Foo foo2foo1
  19. 19. 再オープン 再オープン式 foo1 = Foo.new class << foo1    # foo1を再オープン def hoge end end 再オープン式を使って特異クラスを定義する事も出来る
  20. 20. extendメソッド 再オープンを使用して特異クラスへモジュールを Mix-inする事が出来る。 特異クラスへのMix-inはよく使用する為、同じ動作をするextendメ ソッドが用意されている。 foo1 = Foo.new(1) class << foo1 include Bar end foo1 = Foo.new(1) foo1.extend(Bar)
  21. 21. クラスメソッド
  22. 22. Classクラス Ruby内でクラスを表すクラス クラスはClassクラスのインスタンス class Foo end Foo.class #=> Class Foo = Class.new Foo.class #=> Class
  23. 23. クラスメソッド クラスオブジェクトをレシーバとするメソッド クラスの特異クラスのメソッドとして定義 Foo = Class.new def Foo.hoge end class Foo def self.hoge end end foo1 = Foo.new def foo1.hoge end class << foo1     def hoge end end クラスメソッドの定義例: 特異クラスの定義例:
  24. 24. まとめ Rubyはメソッドチェーンが大事。 オブジェクトモデルの解釈は多くある 他の解説も読んでみると理解が増す 参考・出典:Ruby 公式資格教科書、
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×