際際滷

際際滷Share a Scribd company logo
メタプログラミング檎顎恢霞は
    この原hが胆龍しい
    (i氏鯛ち[憤い)


                  @suchi

        hamamatsu.rb#16 LT
               2012/06/13
刷学塁の
   ジャガッツは
   このギザギザが
    おいしい
http://www.youtube.com/watch?v=r1Pr8x-0ZNU
原hA よく聞うイディオム
メタではないイディオム

?   A.1   ミミックメソッド
?   A.2   nilガ`ド
?   A.3   メソッド哈方
?   A.4   徭失yield
?   A.5   Symbol#to_proc()
A.4 徭失yield
箭: tap 坿タップと揖じ。坿の函り竃し。メソッドチェ`ン
の余嶄で函り竃す。

class Object
 def tap
  yield self
  self
 end
end

%w(a b c).push('d').shift.upcase.next
%w(a b c).push('d').tap{|x|puts x}.shift.upcase.next
A.5 Symbol#to_proc()
シンボルのProcQ

class Symbol
 def to_proc
  Proc.new {|x| x.send(self)}
 end
end

[1,2,5].inject(0, &:+) #=> 8
[1,2,5].inject(0, &:+)
#=> 8
翊
翊燭杯iむ
1.   Symbolのto_procはProcを卦す(1.9ではデフォルト)
2.   そのProcは1つめの哈方をレシ`バとして、シンボル兆のメソッ
     ドに火りの哈方を局して柵び竃す
3.   シンボルに&をつけると、ProcとしてQわれる(坪何でto_proc
     が柵び竃してくれる)
4.   InjectはそのProcに匯つ念の卦、釆造靴ひ殆の屈つを局す。
5.   Injectの恷兜の哈方(0)は恷兜の勣殆の及匯哈方にが聞われる
6.   たとえば恷兜は :+.to_proc.call(0, 1) が柵ばれるので0.+(1)が
     柵ばれる。參和ル`プ
7.   つまり[1,2,3].inject(0,&:+)は、
     ?:+.to_proc.call(:+.to_proc.call(:+.to_proc.call(0,1), 2), 3)
     揖じことになる
     #=>8
原hB ドメイン蒙晒冱Z
? DSL: ドメイン蒙晒冱Z
 C (Domain Specific Language)
? GPL: 喘冱Z
 C (General Purpose Language)
? 坪何DSL:
 C GPL坪に贋壓するDSL
? 翌何DSL:
 C 鏡徭のパ`ザ。かれた冱ZとovS
? ★Rubyはメタプログラミングが誼吭なので坪
  何DSLも誼吭ですよ
原hC 徴g

? これまで竃てきたメタプログ
  ラミングのイディオムカタロ
  グ
? あたかも吉伏がまとめてく
  れたノ`トのように
? 畽に恷m
原hD 歌深




ふつう
原hE からXぎ
晩云Z井のみのスペシャルセクション!
NullObjectパタ`ンの盾h
RSpecのas_null_objectでもおなじみ

@obj = double.as_null_object

@obj.foo
@obj.bar
@obj.baz

畠何ブラックホ`ルのように鞭け峭めてくれるにくい笛
潤胎
刷学塁の
   ジャガッツは
   このギザギザが
    おいしい
http://www.youtube.com/watch?v=r1Pr8x-0ZNU
メタプログラミング檎顎恢霞は
    この原hも胆龍しい

More Related Content

メタプログラミング檎顎恢霞はこの原hが胆龍しい