ͲΜͳػೳʁ w ίϯύΠϥʹҰ෦݅ΛՃ͑Δ͜ͱ͕Ͱ͖Δ w ϥϯλΠϜͰͳ͘ɺίϯύΠϧ࣌ʹద༻ w ੩తղੳͰ͖Δ w ؔʹద༻Ͱ͖Δ w Ͱಋೖ͞Εͨ&YQFSJNFOUBMͳػೳ w ݱ࣌Ͱͷߏจ&BSMZ1SPUPUZQF w ͔͠͠4UEMJCͰଟར༻͞Ε͍ͯΔ w %4-ܖΛ݁Ϳ͜ͱͰ݅ΛࢦఆͰ͖Δ
είʔϓؔͰ࠾༻͞Ε͍ͯΔ public inline fun run( block: () -> R ): R { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return block() } public inline fun T.apply( block: T.() -> Unit ): T { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } block() return this } public inline fun with( receiver: T, block: T.() -> R ): R { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return receiver.block() } public inline fun T.let( block: (T) -> R ): R { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return block(this) } SVO XJUI BQQMZ MFU
είʔϓؔͰ࠾༻͞Ε͍ͯΔ public inline fun run( block: () -> R ): R { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return block() } public inline fun T.apply( block: T.() -> Unit ): T { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } block() return this } public inline fun with( receiver: T, block: T.() -> R ): R { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return receiver.block() } public inline fun T.let( block: (T) -> R ): R { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return block(this) } SVO XJUI BQQMZ MFU
w 3FTVMUHFU0S&MTF w 3FTVMUGPME w 3FTVMUNBQ w 3FTVMUSFDPWFS w 3FTVMUPO'BJMVSF w 3FTVMUPO4VDDFTT w SFRVJSF w SFRVJSF/PU/VMM w DIFDL w DIFDL/PU/VMM w FSSPS 4UEMJCͰͷར༻ঢ়گ w SVO w XJUI w BQQMZ w BMTP w MFU w UBLF*G w UBLF6OMFTT w SFQFBU w NFBTVSF5JNF w NFBTVSF5JNFE7BMVF w $IBS4FRVFODF JT/VMM0S&NQUZ w $IBS4FRVFODF JT/VMM0S#MBOL w $PMMFDUJPO JT/VMM0S&NQUZ w .BQ JT/VMM0S&NQUZ w "SSBZ JT/VMM0S&NQUZ ͰϝιουʹରԠ
w 3FTVMUHFU0S&MTF w 3FTVMUGPME w 3FTVMUNBQ w 3FTVMUSFDPWFS w 3FTVMUPO'BJMVSF w 3FTVMUPO4VDDFTT w SFRVJSF w SFRVJSF/PU/VMM w DIFDL w DIFDL/PU/VMM w FSSPS 4UEMJCͰͷར༻ঢ়گ w SVO w XJUI w BQQMZ w BMTP w MFU w UBLF*G w UBLF6OMFTT w SFQFBU w NFBTVSF5JNF w NFBTVSF5JNFE7BMVF w $IBS4FRVFODF JT/VMM0S&NQUZ w $IBS4FRVFODF JT/VMM0S#MBOL w $PMMFDUJPO JT/VMM0S&NQUZ w .BQ JT/VMM0S&NQUZ w "SSBZ JT/VMM0S&NQUZ ͰϝιουʹରԠ
w ҙͷߏจΛ࣮͢Δ͜ͱ͕Մೳ w ੍͕๛ͰOVMM
OVMM
USVF
GBMTF
@ ҙ
GBJMͳͲ͕͋Δ w ҾෳࢦఆͰ͖Δ w "#zܗࣜɻ"Λϝιουʹఏڙ͢Δͱ#ΛಘΔͱ͍͏ҙ ຯͰͷܖΛܗ w γϯϘϧΛར༻͢Δ͜ͱͰɺҾͱΓͷؒͷҼՌؔ Λࣔ͢ !$POUSBDUϝϦοτ
جຊߏจ 'VODUJPO $POUSBDU &GGFDU &GGFDU &GGFDU w &GGFDU w $BMMT*O1MBDF w DBMMT*O1MBDF w $POEJUJPOBM&GGFDU w JNQMJFT w 4JNQMF&GGFDU w 3FUVSOT w SFUVSOT w 3FUVSOT/PU/VMM w SFUVSOT/PU/VMM
w &YQFSJNFOUBMͳػೳ w มߋ͕͋Δ͔͠Εͳ͍ w ࣍ͷόʔδϣϯͰ͋ΔΛλʔήοτͨ͠*TTVF͕ଟ͋Δ w IUUQTZPVUSBDLKFUCSBJOTDPNJTTVF,5 w IUUQTZPVUSBDLKFUCSBJOTDPNJTTVF,5 w IUUQTZPVUSBDLKFUCSBJOTDPNJTTVF,5 w Ͱ%FQSFDBUFEʹͳΔ͜ͱͳͦ͞͏ʂ w ,PUMJO$POGͰʹ͍ͭͯͷൃද͕͋ΔͷͰظʂ ࠓޙͷల։
·ͱΊ w ͔ΒϓϩάϥϜͷਖ਼֬ੑͷ্Λࢧԉ͢ΔͨΊʹ &YQFSJNFOUBMͳػೳͱͯ͠$POUSBDUT͕ಋೖ͞Ε·ͨ͠ w ։ൃऀ͕ίϯύΠϥʹରͯ͠ܖΛએݴ͢ΔʹΑͬͯշదͳίʔ σΟϯάͷࢧԉʹܨ͕Γ·͢ w ػೳΛ͏͜ͱେࣄͰ͕͢ɺϑΟʔυόοΫͱͯେͰ ͢ɻྫ͑$PSPVUJOFTɺ4UEMJCରԠͳͲͷ*TTVFͷΑ͏ʹϑΟʔ υόοΫΛͯ͠Ұॹʹվળ͍͖ͯ͠·͠ΐ͏ʂ w ܗมΘΔ͔͠Ε·ͤΜ͕ɺͰվળ͕ਐΉͱࢥ͏ͷͰɺ ,PUMJO$POGͷͷػೳൃදΛָ͠Έʹͪ·͠ΐ͏ʂ