ϚνϚν w גࣜձࣾϚνϚν w ࠇ۠ɺֶܳେֶӺ͔Βెา w ձࣾհIUUQCJUMZNBDIJNBDIJJOUSP w ʮͻΒ͔Εͨɺͭͳ͕Γͷ͋ΔҬࣾձΛͭ͘Δʯ w ۙ͝ॴ4/4ˍҬใϝσΟΞIUUQTNBDIJNBDIJDPN w ΤϯδχΞ࠾༻தʂIUUQTXXXXBOUFEMZDPNDPNQBOJFTNBDIJNBDIJJODQSPKFDUT w ϚνϚνΛࢧ͑Δٕज़$IUUQTUDP0.FIZ-:& 3BJMT
3FBDU
1PTUHSF42-
ʜ
3VCZͰͷ։ൃ׆ಈ w ϨϙδτϦཧऀ w ։ൃΠϯϑϥඋ w ඪ४ϥΠϒϥϦͷॆ࣮ w %JHFTUͷ֦ுɺϋογϡΞϧΰϦζϜՃ w 4FUͷ࣮ w CJHEFDJNBM
TZTMPH
JQBEES
[MJCͳͲͷΠϯϙʔτࢧԉอक w 4IFMMXPSETʹTIFMMFTDBQF
TIFMMKPJOΛ࣮ w 3VCZͷϦϦʔε
3VCZʹ͚ͯ w ·͕ͩग़͔ͯΒϲ݄͔͠ܦ͍ͬͯ·ͤΜ͕ɺʹ͚ͨػೳ։ൃٞ ͍Ζ͍Ζਐߦ͍ͯ͠·͢ɻͦͷҰͰɺָ͘͠͝հͰ͖ͨΒͱࢥ͍·͢ɻ w ͜͜Ͱ͝հ͢Δͷ͋͘·ͰዞҙతʹબΜͩྫʹա͗ͣɺཏੑ͋Γ·ͤΜɻ w ڵຯͷ͋Δํ/&84ϑΝΠϧɺ3VCZ։ൃऀձٞͷٞࣄɺ3FENJOFͰͷν έοτϕʔεͷٞΛ͍͔͚·͠ΐ͏ɻ w ։ൃऀಉ࢜ͷٞඇৗʹଟ૬తͰߴจ຺Ͱ͕͢ɺʮ͍ΖΜͳ͜ͱ͕͋ΔΜͩͳ͋ʯ ఔͷड͚औΓͰߏ͍·ͤΜɻ w ։ൃਞͷϑΟʔυόοΫɺ͍ΖΜͳνϟϯωϧΛ௨ͯ͡ؾܰʹͲ͏ͧʂ5XJUUFS ͰͭͿ͚ͩ͘ͰʹೖΔ͔
obj.:meth w obj.method(:meth)ͷॖจ๏ w ϝιουΦϒδΣΫτΛऔΓग़͢ w ैདྷͷ0CKFDUNFUIPEϝιουݺͼग़ͩͬͨ͠ w ϝιουΛऔΔͨΊʹϝιουΛݺͿඞཁ͕͋Δʜ ͍͔ʹ3VCZΒ͍͚͠Ͳʜ w ΦʔόʔϥΠυ͞Ε͍ͯΔ͔͠Εͳ͍ ʢྫ3FRVFTUΦϒδΣΫτ)551ϝιουΛฦ͢ʣ w 0CKFDUͰͳ͘#BTJD0CKFDUΛܧঝͨ͠ΦϒδΣΫτʹNFUIPEϝιο υ͕ͳ͍
ແϒϩοΫQSPDͷஈ֊తഇࢭ w ϝιουఆٛதͰϒϩοΫͳ͠ͷQSPDʹΑͬͯϝιουʹ͖ͬͯͨϒϩοΫΛ औಘ͢Δ͜ͱ͕Ͱ͖Δ • def each_key keys.each(&proc) end • procProc.newͱॻ͍ͯಉ͡ɺଞʹlambda͋Δ • block_given?ͰϒϩοΫ͕͞Ε͔ͨͲ͏͔ΛఆͰ͖ɺyieldͰݺͼग़ͤ Δͷͱ߹Θͤͯɺ໌ࣔతʹҾΛॻ͔ͳͯ͘͞ΕͨϒϩοΫΛར༻Ͱ͖ͨ w ͜ͷػೳΛഇࢭ͠Α͏ͱ͍͏ํʹͳͬͨ w ແϒϩοΫprocͱProc.new͔ΒܯࠂɺແϒϩοΫlambdaഇࢭ
ແϒϩοΫQSPDͷஈ֊తഇࢭ w എܠͱͯ͠ɺ࠷దԽޡΓݕग़ͷͨΊɺ͋Δϝιου͕ ϒϩοΫΛऔΔͷ͔Ͳ͏͔Λ੩తʹఆ͍ͨ͠ɺཧతʹ ҾϦετͰ໌͍ࣔͤͨ͞ɺͱ͍͏ಈػ͕͋Δ w ϒϩοΫΛऔΒͳ͍ϝιουʹϒϩοΫΛͯ͠ɺϝ ιουଆͰνΣοΫ͠ͳ͍ݶΓΤϥʔܯࠂʹͳΒ ͳ͍ w ΘΕΔͱࢥͬͯϒϩοΫΛ͕࣮ͨ͠ΘΕͣແ ҙຯͱ͍͏ޡΓʹؾ͚ͮͳ͍ɺͱ͍͏
ແϒϩοΫQSPDͷஈ֊తഇࢭ w ͨͩɺ$3VCZʹ͍ؒɺdef method(&block)ͱϒϩοΫΛҾͰ ड͚औΔͷ͍ͱ͍͏͕͋Γɺख़࿅ॻ͍ͯ͘Εͳ͔ͬͨ w yieldɺ͞ΕͨϒϩοΫΛݺͿ໋ྩʹίϯύΠϧ͞ΕΔ w ҰํɺԾҾϦετʹ&blockͱॻ͘ͱɺϒϩοΫ͔Β1SPDΦϒδΣΫ τΛੜ্ͨ͠ͰɺϩʔΧϧมʹೖ͞ΕΔ w ͞Βʹblock.callͱ͢ΔͱϩʔΧϧมΛࢀর͠ɺ1SPDΦϒδΣΫ τʹରͯ͠ϝιου͕ݺͼग़͞ΕΔ w Կεςοϓଟ͍ʜ
ແϒϩοΫQSPDͷஈ֊తഇࢭ w 3VCZͰɺԾҾϦετʹ&blockͱॻ͍ͯɺ࣮ࡍʹblockΛ͏ ·Ͱ1SPDΦϒδΣΫτͷੜΛԆ͢ΔΑ͏ʹͳͬͨ w தͰblock_given?ͱyieldΛͬͨ··ɺϒϩοΫΛऔΔ͜ͱΛԾ ҾϦετͰදݱͯ͠ੑೳ্ͷϖφϧςΟ͕ͳ͘ͳͬͨ w 3VCZͰɺblock.callyieldͱಉͷੑೳʹͳͬͨ w ͨͩɺcallͷΦʔόʔϥΠυ༗ແΛ֬ೝ͢ΔͳͲ໘ͳ࣮ͷࣀ w ͜ΕͰɺ໌ࣔతʹ&blockͱblock.callΛ͏ελΠϧΛਪͰ͖ΔΑ ͏ʹͳͬͨ
ແϒϩοΫQSPDͷஈ֊తഇࢭ w ٯʹɺʮϒϩοΫΛऔΒͳ͍͜ͱʯΛ໌ࣔͰ͖ΔΑ͏ʹ͖͔͢ɺͱ͍ ͏ٞਐΜͰ͍Δ w ॳɺdef foo(&nil)ͱॻ͘͜ͱʹ͢Ε͍͍ͷͰɺͱ·ͱ ·Γ͔͚ͨ w ͔͠͠ɺͦ͏͢ΔͱʮϒϩοΫΛऔΒͳ͍ϝιουͯ͢ʹ&nilΛ ೖΕΑ͏ʯͱ͍͏େྔͷ13͕Ұؾʹԡ͠دͤΔةዧ͕͋ΔͷͰऔ ΓΊʹ w ݱࡏɺίϯύΠϧ࣌ͷ੩తղੳͰͰ͖ͳ͍͔ɺͱ͍͏औΓΈ͕ࢼ͞ Ε͍ͯΔ
ແϒϩοΫQSPDͷஈ֊తഇࢭ w ͨͩɺTVQFSͱ͍͏น͕ൃݟ͞ΕΔ w super͋Δ͍super()ͱॻ͘ͱɺԿࢦఆ͍ͯ͠ͳ͍͕ɺ ͖ͬͯͨϒϩοΫΛεʔύʔϝιουʹ͢Α͏ʹͳ͍ͬͯΔ w superͷํ͔Δ͕ɺsuper()ͷํҰମͳͥʜ w ͦͷͨΊɺεʔύʔϝιουḷͬͯݟͳ͍ͱϒϩοΫҾΛͬ ͍ͯΔͷ͔Θ͔Βͳ͍ w ݱࡏطଘͷϢʔβίʔυΛؚΊௐࠪɾݚڀ͕ਐߦத$
&OVNFSBCMFUBMMZ w ॳcount_byͱ͍͏໊લͰɺϒϩοΫΛऔΔܗͰఏҊ͞Ε͍ͯͨʢϒϩοΫΛద ༻ͨ͠Ͱूܭ͢Δʣ w ͔͠͠ɺ͍͔ͭ͘ͷͰࢍಉΛಘΒΕͣ w ໊લ͕͍·͍ͪcountͱͷରশੑ͕ͳ͍ʢsort_bysort
max_bymaxͳ Ͳ͔Βͷྨਪ͕ޮ͔ͳ͍ʣ w ػೳ͕ଟ͍ϒϩοΫΛऔΔͷΦϓγϣφϧͰʁඞཁͳΒmap͔ͯ͠Β ͍͍ͤ w γϡϫϧπม͍ͨ͜͠ͱ͋Δ͔͠Εͳ͍͕ɺදΛͲ͏͢Δ͔ ༷ΛܾΊ͍ w tallyͱ͍͏໊લΛಘͯɺϒϩοΫΛऔΒͳ͍γϯϓϧͳܗͰ࠾༻
&OVNFSBCMFUBMMZ w UBMMZͱΛ͑ͯه͢Δ͜ͱͰɺࢴࠇ൘ʹҰຊͣͭઢΛॻ ͖ͳ͕ΒΧϯτ͢ΔͨΊͷه߸ͷݺশͰ͋ΔʢຊͰͷʮਖ਼ʯ ʹ͋ͨΔه߸ɺʮ㠟ʯͷΑ͏ͳܗʣ w ͪͳΈʹ6OJDPEFͰʮਖ਼ʯͱͱʹೖΓ·ͨ͠ IUUQTUXJUUFSDPNLFO@MVOEFTUBUVT
٫Լ͞Εͨͷ w BVUPMPBEͷഇࢭ⚡ w .BU[εϨουηʔϑςΟͷ؍͔Βຊ࣭తʹةͳ͍ͷͰͣͬͱফͨ͠ ͍ w 3BJMT͕DPOTU@NJTTJOHͰͷࣗಈϩʔυػߏΛΊͯBVUPMPBEΛ͏ ;FJUXFSLΛͰ࠾༻ɺͱ͍͏͜ͷλΠϛϯάͰ͠͝Λ֎͢ͷ͔⽐ͱ ࢲͷதͰ૽વ w ͔͠͠3BJMTΞϓϦͷ։ൃͰFBHFSMPBEJOHͩͱϓϩηεىಈɾ࠶ىಈ ͕ॏ͗͢ΔͷͰ͜͏͍͏ػߏඞਢͱઆಘ☝ w গͳ͘ͱ3VCZYͷؒ͢ɺͱ͍͏.BU[ͷݴ࣭Λಘͨ
٫Լ͞Εͨͷ w BVUPMPBEͷഇࢭ w ͦͷޙɺBVUPMPBEΛΑΓ҆શʹ͢ΔͨΊͷݚڀͱվम͕ਐΜͰ ͍Δ w IUUQXXXBLSPSHEIUNMB@@ w IUUQXXXBLSPSHEIUNMB@@@ w IUUQTCVHTSVCZMBOHPSHJTTVFT w IUUQTCVHTSVCZMBOHPSHJTTVFT
٫Լ͞Εͨͷ w "SSBZ)BTIɺ4USJOHͷΑ͏ʹσϑΥϧτͰϑϦʔζ͢ΔϞʔυ͕΄͠ ͍ɺ͋Δ͍୯߲ͰEVQGSFF[F͍ͨ͠ w IUUQTCVHTSVCZMBOHPSHJTTVFT w ʮͦΜͳʹ΄͍͠ʁʯ·ͩջٙత w Ͱ3VCPDPQར༻ऀ͔Β͢Δͱɺఆྻɾϋογϡʹ.freezeΛ ͚ͯճΒΕΔܦݧۤʑ͍͠ʜ w ͍ͣΕ·ͨνϟϯε͋Δ͔
։ൃதɾݕ౼தͷػೳ w #FHJOMFTT 4UBSUMFTT 3BOHFT w IUUQTCVHTSVCZMBOHPSHJTTVFT w &OEMFTT3BOHFT @ary[1..] ͕ೖͬͨͷͰɺࠓࠨଆΛলུͨ͠ͷ ೖΕ͍ͨ w "DUJWF3FDPSEͳͲͷ%4-ͰศརProduct.where(price: ..1000) w &OEMFTT3BOHFTಋೖޙʹ͍͔͕ͭ͘ൃݟɾରॲ͞ΕͨͷͰɺͦΕΒͷ ख͕ͯऴΘͬͯམͪண͍͔ͯΒ w &OVNFSBUPS:JFMEFSUP@QSPD w IUUQTCVHTSVCZMBOHPSHJTTVFT
։ൃதɾݕ౼தͷػೳ w σϑΥϧτϒϩοΫҾ@1
@2
ʜ w IUUQTCVHTSVCZMBOHPSHJTTVFT w ͣͬͱ·Ε͍ͯΔػೳnumbers.map { "%02x" % @1 } w طଘจ๏ͱিಥͷͳ͍حͷҊʢ@1
@2,…ʣʹظ w ύλʔϯϚονػೳʢDBTFJOߏจʣ w IUUQTCVHTSVCZMBOHPSHJTTVFT w ڧͪ͘·Ε͖ͯͨػೳ w εΫϦϓτݴޠͷதͰڧྗͰ3VCZͷڧΈͱݴΘΕ͖͕ͯͨɺؔܕݴޠ͕ϝδϟʔ ʹͳ͖ͬͯͨࠓͰͪΐͬͱݟྼΓ͢Δ
ࠓޙͷ3VCZͷ༧ఆ w ݄ w ʹ։ൃऀձٞIUUQTCVHTSVCZMBOHPSHJTTVFT w 6OJDPEF͕ग़ͨΒɺ3VCZYΛϦϦʔε w ݄ w 3VCZ,BJHJձظલʹ։ൃऀձٞ w ৽ݩ߸͕ൃද͞ΕͨΒ6OJDPEF͕ग़Δ w ͦΕΛͬͯ3VCZZΛϦϦʔε w ຖ݄։ൃऀձٞ w νϟϯεຖ݄ IUUQTCVHTSVCZMBOHPSHJTTVFT w ݄ w 3VCZϦϦʔε