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

メタプログラミングと生産性 / meta-programming

Avatar for erukiti erukiti
February 21, 2018

メタプログラミングと生産性 / meta-programming

メタプログラミングを生産性向上手段の一つとして知っておくと、プログラマ人生が捗るかもしれません!

Avatar for erukiti

erukiti

February 21, 2018
Tweet

More Decks by erukiti

Other Decks in Programming

Transcript

  1. ࣗݾ঺հ w FSVLJUJ 5XJUUFS (JUIVC 2JJUB .FEJVNͳͲ  w Ҿ͖͜΋ΓؾຯϑϦʔϥϯεΤϯδχϟʔ

    ڭࡐ࡞੒ͱ͔ ϥΠλʔͬΆ͍ײ͡ͷ͜ͱ΋ʜ  w όοΫΤϯυϝΠϯ ϑϩϯτΤϯυɾΠϯϑϥͳͲ  w ޷͖ͳݴޠ͸5ZQF4DSJQU ͱ͍͏͔ܕͷ͋Δ&$."4DSJQU  w ಉਓࢽಉਓࢽ঎ۀԽಉਓࢽಉਓࢽ ߹ಉࢽ ঎ ۀԽਐߦத߹ಉࢽࣥචதˍಉਓࢽࣥචத
  2. ந৅ͱ۩৅ w ϓϩάϥϛϯά ཁ݅ఆ͔ٛΒίʔσΟϯά· Ͱશ෦ؚΊΔ ͸ɺେମந৅ͱ۩৅ͷߦ͖དྷ ਓؒ૚ χʔζ΍ϏδωεϩδοΫɺཁ݅ ઃܭ ΞʔΩςΫνϟͳͲେ͖ͳઃܭ

    ৄࡉઃܭ ΋ͬͱৄࡉʹ;Έ͜Μͩઃܭ ൚༻࣮૷ ൚༻౓ͷߴ͍ίʔυ ݸผ࣮૷ ৄࡉͳࣄ৘ʹ౿ΈࠐΜͩίʔυ
  3. ϓϩάϥϚͷੜ࢈ੑ w ͔͔ͬͨ࣌ؒ ίετ ʹର͢Δɺ੒Ռ෺ͩͱࢥ ͏͕ɺࢦඪ͕೉͍͠ ίʔυͷߦ਺ʁ͍͡Γ΍ ͢͞ʁ඼࣭ʁṶֹ͔ͬͨۚʁ  w

    Ͱ΋૬ରతʹ͸ࢉग़͸Ͱ͖Δ ಉ͜͡ͱΛୡ੒ ͢Δͷʹཁ͢Δ࣌ؒͷࠩ  w ഒʙഒͷࠩΛ࣋ͭਓ͕͍Δͱ͍ΘΕΔ
  4. ແବΛ๷͙ w ਖ਼͍͠޻ఔ؅ཧ ಛʹઓུͷޡΓΛઓज़ͰऔΓ ໭͞ͳ͍͜ͱ͕ॏཁ  w ΑΓޮ཰తͳखஈΛબ΂ΔΑ͏ʹखࡳΛ૿ ΍͢ w

    ͦͷத͔Βద੾ͳબ୒Λ͢Δ ༩͑ΒΕͨࡋྔ͕গͳ͗͢Δ৔߹͸ స৬Λߟ͑ͨํ͕͍͍͔΋͠Ε·ͤΜ ἤΓ
  5. $ cat test.js class Hoge {} const hoge = new

    Hoge() const fuga = new Proxy(hoge, { get(target, name) { console.log(`${target}の${name}をgetしにきやがりました`) return 'みせねーよ!' }, set(target, name, value) { console.log(`${target}の${name}に${value}をsetしにきやがりました。ふてえ やろうだ!`) } }) console.log(fuga.x) fuga.y = 10 $ node test.js [object Object]のxをgetしにきやがりました みせねーよ! [object Object]のyに10をsetしにきやがりました。ふてえやろうだ!
  6. ·ͱΊ w ϝλϓϩάϥϛϯά͸ϓϩάϥϜΛѻ͏ϓϩάϥϜ w ೉ͦ͠͏͚ͩͲͦ͏Ͱ΋ͳ͍ ৔߹ʹΑͬͯ໘౗ͩͬͨΓ ࠇຐज़ʹͳΓ͕ͪͰ͸͋Δ͚Ͳ  w ந৅ͱ۩৅Λߦ͖དྷ͢Δͷ͕ϓϩάϥϚ

    w ੜ࢈ੑ͸ͦͷόϥϯεͷऔΓํʹେ͖͘ࠨӈ͞ΕΔ ࣋࿦  w ϝλϓϩάϥϛϯά͸όϥϯεͷྑ͍ந৅ԽΛ΍Δखஈͷ ͻͱͭ