第4回セントラルソフトRuby研究会

692 views

Published on

若手による社内ruby勉強会の資料です。

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
692
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

第4回セントラルソフトRuby研究会

  1. 1. 第4回Ruby研究会 担当:石河
  2. 2. AGENDA オブジェクト指向機能  ポリモルフィズム  ダックタイピング  動的型  継承  Mix-in  include  extend
  3. 3. ポリモルフィズム 多態性 同じ名前のメソッドが、レシーバのオブジェ クトによって違う動きをする
  4. 4. 開け方の違う箱が3つあるとして、箱を開けたい時は開けろと命令するだけで蓋を持ちあげる 紐を解く 鍵をあけるそれぞれに適した方法であけてくれるという イメージです(まつもとさん曰く)
  5. 5.  sizeメソッドはオブジェクトの大きさを求め るメソッド String#size  文字列の大きさを返す Array#size  要素の数を返す
  6. 6. 【コード】 【出力】 a = "A" 1 p a.size 4 3 a = 12 2 p a.size 整数の実装上のサイズ a= [1,2,3] をバイト数で返します p a.size a= [1.2],[3,4] p a.size
  7. 7. ダックタイピング "If it walks like a duck and quacks like a duck, it must be a duck“ (もしもそれがアヒルのように歩き、アヒル のように鳴くのなら、それはアヒルである) オブジェクトのクラスによらず、そのオブ ジェクトが期待通りに振る舞えば適切なもの として扱う
  8. 8. 【コード】 【出力】 def add_values(*v)  10 return v.inject{|result,item| result += item}  "abc" end  [1, 2, 3, 4, 5, 6, 7]  [1, 2, 3, 4, 5, [6, 7] p add_values(1,2,3,4) ] p add_values("a","b","c") p  TypeError add_values([1,2,3],[4,5],[6,7]) TypeError p add_values([1,2,3],[4,5,[6,7]]) p add_values(1,2,3,"4") injectメソッド p 繰り返し計算を行うメソッドの戻り値はブロックが最後に返した値
  9. 9. 動的型 変数にどのクラスのオブジェクトが格納され ているかは、実行時に初めてわかります このような言語を動的型言語と呼ぶ
  10. 10. 【コード】 【出力】 x = (rand(2) == 0)  String ? "123456" : 123456  NilClass  NameError puts x.class x = nil puts x.class puts y.class
  11. 11. 継承前回触れているので簡単に スーパークラスとサブクラスの親子関係があ ります Objectクラスは全てのクラスのスーパーク ラスです サブクラスはスーパークラスのメソッドを 使ったり、上書きしたり、新たにメソッドを 追加したりできます Rubyにおける継承は単一継承です
  12. 12. Mix-in モジュールを取り込むことでクラスを拡張す る仕組みです 多重継承の代わりの機能です 例えば、複数のクラスで使える sort,map,find,rejectメソッドなどは Enumerableモジュールで定義されています
  13. 13. モジュール モジュールは定数やメソッドを定義できる クラス変数のようなものを宣言したり、イン スタンスやサブクラスのようなものを作るこ とはできない 関数のように実行することもできます (モジュール関数)  【コード】  puts Math.sqrt(2)  【出力】  1.4142135623731
  14. 14. モジュールの定義【コード】 module モジュール名 module Gleeting def sayHello メソッド定義 puts "hello" end def sayGoodbye puts “goodbye" end end
  15. 15. Incrude モジュールの実装(定数、メソッドなど)を クラスや別のモジュールに取り込みます
  16. 16. モジュールのinclude【コード】 class Foo  【出力】 include  foo include Greeting  hello def say puts " foo" end end a = Foo.new a.say a.sayHello
  17. 17. extend includeはクラスにモジュールを実装する が、extendはオブジェクトにモジュールを 実装します モジュールのメソッドはオブジェクトの特異 メソッドとして追加されます
  18. 18. モジュールのextend【コード】 module Wareki  【出力】 def heisei  23 return self.year - 1988 end  NoMethodError end t1 = Time.local(2011,12,22) t2 = Time.local(2011,12,22) t1.extend Wareki p t1.heisei p t2.heisei
  19. 19. モジュール関数【コード】  【出力】 module Gleeting  1.4142135623731 def sayHello  hello puts "hello"  NoMethodError end module_function :sayHello end モジュールの定義 class Foo include Greeting def say モジュール関数の設定 puts "foo" end end クラスの定義 puts Math.sqrt(2) a = Foo.new Gleeting.sayHello include a.sayHello
  20. 20. モジュールの定数【コード】  【出力】 module Gleeting  warning: already ASA = “朝" initialized constant ASA def sayHello  朝 puts "hello"  morning end end puts Gleeting::ASA Gleeting::ASA = "morning" puts Gleeting::ASA
  21. 21. 以上

×