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

404 views
334 views

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
404
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 公式資格教科書、

×