Upgrade to Pro — share decks privately, control downloads, hide ads and more …

分かった気になるメタプログラミングRuby

 分かった気になるメタプログラミングRuby

原著者と訳者から快諾していただき、Meta Programming Ruby のハンズオンをRubyの勉強会で実施しています ;)

Co-Edo.rb - CoEdo Ruby User Group
https://coedo-rails.doorkeeper.jp/

A forked repository for Ruby Metaprogramming study group
https://github.com/yasslab/ruby-metaprogramming-tokyo/

メタプログラミングRuby 第2版
https://www.oreilly.co.jp/books/9784873117430/

Paolo Perrotta 著、角 征典 訳

Fffb9af58e08cf384f2a8c1c40c3d38d?s=128

Yohei Yasukawa

May 05, 2017
Tweet

More Decks by Yohei Yasukawa

Other Decks in Programming

Transcript

  1. ෼͔ͬͨ ؾʹͳΔ ϝλϓϩRuby @yasulab Block ฤ

  2. YOUR_COUPON_CODE ίϛέʹग़ళ ͖ͯ͠·ͨ͠

  3. ෼͔ͬͨ ؾʹͳΔ ϝλϓϩRuby @yasulab

  4. എܠ ୈ2൛͕2015೥ʹग़൛

  5. RubyKaigi 2015 ొஃ

  6. ஶऀʹΑΔऴ೔ηϛφʔ

  7. ߨٛϊʔτGitHubͰެ։

  8. ຊΠϕϯτʹ͓͚Δ ར༻ڐ୚΋௖͚·ͨ͠

  9. ͱ͸͍͑, ຊίʔε͸݁ߏ௕͍ :( (΋ͱ΋ͱऴ೔ίʔεͩ͠)

  10. Ͱ͖Δͱ͜Ζ·Ͱ ϋϯζΦϯΛਐΊͯ, ࢒Γ͸֤ࣗͰ௅ઓ!

  11. ෼͔ͬͨ ؾʹͳΔ ϝλϓϩRuby @yasulab Block ฤ

  12. ·ͱΊ 1. ϒϩοΫͷجຊ 2. Proc ͱ Lambda (->) 3. ϒϩοΫͰఆٛ͢Δ

  13. 1. ϒϩοΫͷجຊ

  14. ίʔυͷմ { … } Λ౉͢

  15. ίʔυͷմ { … } Λ౉͢

  16. ίʔυͷմ { … } Λ౉͢

  17. ίʔυͷմ { … } Λ౉͢

  18. ίʔυͷմ { … } Λ౉͢

  19. ྫ: ԋࢉํ๏Λ͋ͱͰܾΊΔ

  20. ྫ: ԋࢉํ๏Λ͋ͱͰܾΊΔ

  21. ྫ: ԋࢉํ๏Λ͋ͱͰܾΊΔ

  22. ྫ: ԋࢉํ๏Λ͋ͱͰܾΊΔ

  23. ྫ: ԋࢉํ๏Λ͋ͱͰܾΊΔ

  24. 2. Proc ͱ Lambda (->)

  25. ίʔυͷմ { … } Λอଘ͢Δ

  26. ίʔυͷմ { … } Λอଘ͢Δ

  27. ίʔυͷմ { … } Λอଘ͢Δ

  28. Proc ͱ Lambda ͷҧ͍ (ྫ1)

  29. Proc ͱ Lambda ͷҧ͍ (ྫ1)

  30. Proc ͱ Lambda ͷҧ͍ (ྫ1)

  31. Proc ͱ Lambda ͷҧ͍ (ྫ1)

  32. Proc ͱ Lambda ͷҧ͍ (ྫ2)

  33. Proc ͱ Lambda ͷҧ͍ (ྫ2)

  34. Proc ͱ Lambda ͷҧ͍ (ྫ2)

  35. Proc ͱ Lambda ͷҧ͍ (ྫ2)

  36. Proc ͱ Lambda ͷҧ͍ (ྫ2)

  37. ͓·͚ yield == method(&proc) http://d.hatena.ne.jp/yoshidaa/20090511/1241967137 ࢀߟ: Ruby ͷ yield ͬͯ݁ہͳΜͳͷʁ

    - YNote
  38. ϒϩοΫΛಥવ౉ͯ͠ΈΔ

  39. block_given? Ͱ֬ೝ

  40. block_given? Ͱ֬ೝ # ϒϩοΫ͕౉͞Εͳ͍৔߹ # ϒϩοΫ͕౉͞Εͨ৔߹

  41. &proc ͰϒϩοΫΛಡΉ

  42. &proc ͰϒϩοΫΛಡΉ Ͱ΋ຖճ &proc Λఆٛ͢Δͷ͸໘౗

  43. ͦ͜Ͱʮyieldʯ✨ # &proc ͸ඞཁແ͍

  44. ͦ͜Ͱʮyieldʯ✨

  45. ·ͱΊ: yield ͱ͸? • ϒϩοΫΛϝιουʹ౉ͤΔ • &proc ͳͲΛఆٛͯ͠ݺͼग़͢ • yield

    ͩͬͨΒఆٛͷඞཁͳ͠!
  46. ΍ͬͯΈΑ͏! ՝୊ 3 quizzes/3.buffer/buffer.rb

  47. 3. ϒϩοΫͰఆٛ͢Δ

  48. ී௨ͷϝιουఆٛ

  49. ී௨ͷϝιουఆٛ

  50. ϒϩοΫͰϝιουఆٛ

  51. ϒϩοΫͰϝιουఆٛ

  52. “define_method ϝιου໊ ϒϩοΫ” ϒϩοΫͰϝιουఆٛ

  53. define_method ͷ࢖༻ྫ

  54. define_method ͷ࢖༻ྫ

  55. ྨࣅྫ: ClassΫϥε

  56. ྨࣅྫ: ClassΫϥε

  57. ྨࣅྫ: ClassΫϥε

  58. ྨࣅྫ: ClassΫϥε

  59. ࢼͯ͠ΈΑ͏: είʔϓΛ೧͡ۂ͛Δ

  60. ࢼͯ͠ΈΑ͏: είʔϓΛ೧͡ۂ͛Δ

  61. ࢼͯ͠ΈΑ͏: είʔϓΛ೧͡ۂ͛Δ

  62. ΍ͬͯΈΑ͏! ՝୊ 3 quizzes/3.scope_gates/scope_gates.rb

  63. ׆༻ྫ: είʔϓΛ೧͡ۂ͛Δ

  64. ׆༻ྫ: είʔϓΛ೧͡ۂ͛Δ

  65. ׆༻ྫ: είʔϓΛ೧͡ۂ͛Δ

  66. ׆༻ྫ: είʔϓΛ೧͡ۂ͛Δ

  67. ·ͱΊ 1. ϒϩοΫͷجຊ 2. Proc ͱ Lambda (->) 3. ϒϩοΫͰఆٛ͢Δ

  68. એ఻: ങ͍·͠ΐ͏!

  69. YOUR_COUPON_CODE એ఻: ಈը / ॻ੶ ൢചத!

  70. RailsղઆηϛφʔͷϥΠϒऩ࿥ಈը΋͋Γ·͢! ऩ࿥಺༰: 2016೥5݄࣮ࢪͷ GW ूதηϛφʔ (߹ܭ34࣌ؒ෼) ࢖༻ڭࡐ: Ruby on Rails

    νϡʔτϦΞϧୈ3൛ (Rails 5.0ରԠ) http://railstutorial.jp/seminars#record
  71. ఏڙ http://yasslab.jp/

  72. ෼͔ͬͨ ؾʹͳΔ ϝλϓϩRuby @yasulab Block ฤ

  73. ͓஌Βͤ

  74. CoEdo Ruby User Group https://coedo-rails.doorkeeper.jp/

  75. 1. Ruby/RailsϏΪφʔζ۞ָ෦

  76. ॳڃऀʹΑΔॳڃऀͷͨΊͷLT

  77. LTޙ͸֤ࣗͰɺ΋͘΋͘ษڧ ಈըࢹௌ (ձ৔ݶఆ) ϝλϓϩݚڀձ (ͱ͖Ͳ͖։࠵)

  78. ऴྃޙ͸࠙਌ձ (೚ҙࢀՃ)

  79. એ఻: ങ͍·͠ΐ͏! 2. Railsूதղઆηϛφʔ RailsνϡʔτϦΞϧΛ੍࡞ऀ͕5೔ؒͰղઆ

  80. GWूத͸શ੮ Ωϟϯηϧ଴ͪ

  81. 5ஈ֊ධՁͰ ฏۉ఺͸ ‘̑’

  82. ۙ೔தʹ ಈըൢച༧ఆ!

  83. CoEdo Ruby/Rails User Group https://coedo-rails.doorkeeper.jp/

  84. એ఻: ങ͍·͠ΐ͏! ·ͣ͸ʮίϛϡχςΟʹࢀՃʯ͔Β :) ࠓޙͷΠϕϯτ৘ใͳͲ͕ಧ͖·͢