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

リファクタリングとtsort

45c0e67049c82c238143b82a1660a713?s=47 ainame
October 16, 2013

 リファクタリングとtsort

`ib` gemをリファクタリングして、機能追加した時の話

45c0e67049c82c238143b82a1660a713?s=128

ainame

October 16, 2013
Tweet

Transcript

  1. ϦϑΝΫλϦϯάͱtsort 2013-10-16 / Shibuya.rb @ainame

  2. ࣗݾ঺հ @ainame / Satoshi Namai גࣜձࣾϛΫγΟ εϚϗΞϓϦΤϯδχΞʹͳΔ༧ఆͩͬͨͷͰ͢ ͕ɺ૬มΘΒͣPerlॻ͍ͯ·͢ ࠷ۙɺRubyMotion΍ͬͯΔ ΋͘΋͘ձ

    / RubyMotion Tokyo meetups
  3. ࠓ೔ͷ࿩ 1.ϦϑΝΫλ1 - ςϯϓϨʔτΤϯδϯಋೖ 2.ϦϑΝΫλ2 - Hash & ArrayΛΦϒδΣΫτԽ 3.tsortಋೖͰػೳվળ

    gemΛ͍ͬͨ͡࿩
  4. None
  5. None
  6. ibʹ͍ͭͯ RubyMotionͰInterfaceBuilderΛ࢖͏ͨΊͷgem rake ib:open app/*.rbΛparseͯ͠Stubs.hΛు͘ Interface Builder্ͰOutletΛUIͱ࿈ܞͰ͖Δ https://github.com/yury/ib

  7. ib͕Ruby͔Βੜ੒

  8. super class͕ઌʹఆٛ ͞Εͯͳ͍ͱμϝ Τϥʔ͕ग़Δͷ ݏͩͬͨ

  9. Կͱͳ͘௚͍ͨ͠ͳʔ ͱࢥͬͯιʔείʔυಡΜͰΈͨΒ खΛೖΕΔͷ͕ਏͦ͏ͩͬͨͷͰ ϦϑΝΫλϦϯάͯ͠Έͨ

  10. templateΤϯδϯͷಋೖ Stubs.hΛग़ྗ͢ΔͨΊʹίʔυͷதʹͻͳܗίʔ υ͕ຒΊࠐ·Ε͍ͯͨ 1ຕϑΝΠϧΛςϯϓϨʔτϑΝΠϧɺςϯϓϨʔ τͷhelperɺϑΝΠϧੜ੒ॲཧͷ3ͭʹ෼཭ `tilt` gem͕໾ཱͭ SinatraͰ࢖ΘΕͯΔ

  11. Before

  12. writeϝιουʹ ॲཧ͕ϕλॻ͖ ඞͣIOॲཧ͕ൃੜͯ͠ ςετͮ͠Β͍

  13. ϔϧύʔͷ தͰϔϧύʔ͕ݺ͹Εͯ ॲཧ͕௥͍ͮΒ͍ ഑ྻΞΫηε ͕Ή͍ͣ

  14. After

  15. tiltͰrender͢Δॲཧ RenderingHelperΫϥεʹ viewͷϔϧύʔΛ࣮૷ ϔομͱ ࣮૷ϑΝΠϧΛ ϑΝΠϧʹॻ͖ग़͠

  16. ͜ͷޙ ঺հ͢ΔϦϑΝΫλϦϯάͰ ϔϧύʔ͸γϯϓϧʹ

  17. Hash & ArrayΛΦϒδΣΫτԽ HashͱArrayͰԿͰ΋σʔλΛදݱ͍ͯ͘͠ͷ͸͏Μ͟Γ͢Δ data[‘a.rb’][0][:class][0][0] ????????? ڞಉ։ൃ͢Δ࣌ʹۤ͠Ή σʔλΛϥοϓ͢ΔΦϒδΣΫτΛ࣮૷ def [](key);

    @data[key] endͰޓ׵Λ࣋ͨͤΔ ΞΫηαʔΛ༻ҙͯ͠ෳࡶͳΞΫηεΛղܾ
  18. Before

  19. None
  20. After

  21. None
  22. ߏ଄ମͰ͞Βʹ ߏ଄Խ ϔϧύʔ ݩσʔλʹΞΫηεग़དྷΔ

  23. ݩͷinfo[:class][0][0] ΑΓ෼͔Γ΍͍͢

  24. ґଘؔ܎ղܾ Կ΋ߟ͑ͣʹϔομʔϑΝΠϧʹॻ͖ͩ͢ͱ XCode্Ͱ͸Τϥʔˍwarn͕ग़Δ ্͔Βॱʹ͖ͪΜͱΫϥεఆٛ͞Εͯͳ͍ͱμϝ ґଘؔ܎ͷղܾ͕ඞཁʂʂʂʂʂʂʂ tsort࢖͏ͱ໰୊͕؆୯ʹղ͚Δʂ

  25. super class͕ઌʹఆٛ ͞Εͯͳ͍ͱμϝ

  26. tsort tsortͱ͸ʁ Rubyͷඪ४ϥΠϒϥϦ τϙϩδΧϧιʔτͷRubyͷ࣮૷ ґଘؔ܎ͷղܾʹ࢖͑Δ rubygems, bundlerͱ͔ʹ࢖ΘΕͯΔ

  27. τϙϩδΧϧιʔτ ༗޲ແด࿏άϥϑ άϥϑͷ௖఺ؒͷґଘؔ܎Λݩͱʹιʔτ͢Δ ӈͷਤͷ৔߹ B, A, D, C, Eͷॱ

  28. IB::DependencyResolver ґଘؔ܎ղܾ༻ͷΫϥεΛ࣮૷ parse݁ՌΛड͚औΔ ༗޲ແด࿏άϥϑʹม׵ tsortͰฒͼସ͑ ฒͼସ͑݁ՌΛฦ͢

  29. Τϥʔ 0 !!!

  30. ·ͱΊ طଘgemʹػೳ௥Ճ͢Δ࣌ʹ͙͢ʹػೳ௥Ճ͕ແ ཧͦ͏ͩͬͨΒগͮͭ͠ϦϑΝΫλϦϯά ύʔϑΣΫτRubyʹ͸ࡌͬͯͳ͍͚Ͳɺ tsortͱ͔tiltͱ͔ศརͳͷͰϢʔςΟϦςΟܥͷ ϥΠϒϥϦ࡞Δ࣌͸࢖͍·͠ΐ͏ʂʂʂ

  31. RubyMotion meetup •@ainameͱ@HIROCASTER͕ओ࠵ •ຖ݄ͷୈೋՐ༵ʹ։࠵Ͱ΋͘΋͘ձελΠϧ •RubyMotion։ൃऀͷ@watson1978͞ΜࢀՃ •ձ৔͸ϛΫγΟͷίϥϘϧʔϜ •࣍ճ͸2013೥11݄5೔(Ր)Ͱ͢