More Related Content More from Tomohiro Kumagai (20) Swift 所有権 要諦 #ゆるちとせ7. ▶︎
Ҿͷॴ༗ݖΛࢦఆՄೳʹ
func something(value: Int)
func something(value: borrowing Int)
func something(value: consuming Int)
ॴ༗ݖͷ۩ମྫ
▶︎
ͷ໌ࣔෳফඅ͕Մೳʹ
let value = copy otherValue
let value = consume otherValue
▶︎
ෳͰ͖ͳ͍ߏମ͕ఆٛՄೳʹ
struct Value : ~Copyable {
}
19. ˙ ෳෆՄͳܕͷͱ͖ʜ
var value: Value
˙ ී௨ʹఆٛͨ͠ͱ͖ʜ
var value: Int
·ͱΊ
มͷॴ༗ݖ
ෳෆՄͳͱܕʜ
~Copyableʹ४ܕͨ͠ڌ
struct Value : ~Copyable {
⋯
}
ैདྷ௨Γͷෳ
ର ফඅͷରෳͰ͖ͳ͍
˞ ैདྷ௨Γͷͷɺैདྷ௨Γʹಈ͘ʢॏཁʣ
25. let other = value
ಛผϧʔϧ
ӈลফඅ
WBMVF͕ैདྷ௨ΓͷͳΒ
PUIFSʹΛෳͯ͠ೖʢैདྷ௨Γʣ
˞ ؔͷফඅ͠Α͏ͱ͢ΔҾʹ͢ͱ͖ͱɺ
΄΅ಉ͡ڍಈʢͨͩ͠ɺ
ೖʹݩएؔׯ༩ʣ
WBMVF͕ফඅͷରͳΒ
PUIFSʹݖརΛৡ͠ɺ
Ҏ߱WBMVF͑ͳ͘ͳΔ
WBMVFΛआ༻͍ͯ͠Δ͚ͩͳΒ
PUIFSैདྷ௨Γʹѻ͓͏ͱ͢ΔͷͰɺ
ෳ͠ͳ͍ݶΓͤͳ͍
28. ˙ෳԋࢉࢠ
let other = copy value
ॴ༗ݖԋࢉࢠ
ෳԋࢉࢠͱফඅԋࢉࢠ
˙ফඅԋࢉࢠ
let other = consume value
WBMVFΛফඅѻ͍ʹ͢Δ
Γʹͨ͠ͷͱಉ༷ʹWBMVF͕ѻΘΕΔʢෳ͞ΕΔՄೳੑʣ
WBMVFΛෳѻ͍ʹ͢Δ
ैདྷ௨ΓʹWBMVF͕ෳ͞ΕΔ
30. func calculate(_ value: any BinaryInteger) {
⋯
}
calculate(value)
Ṗϧʔϧ
ଘࡏʹܕফඅͯ͠ೖΔ
ଘࡏܕͷΩϟετ͕ඞཁʹͳΔͱ͖
ͦͷফඅ͞ΕΑ͏ͱ͢Δ
˞ ͜Εࠓ͚ͩͷ੍͔ݶ͠Εͳ͍
आ༻͍ͯ͠ΔফඅͰ͖ͳ͍ͨΊɺ
ෳ͠ͳ͍ͱͤͳ͍
ݺग़ઌ͕ফඅ͠Α͏ͱͯ͠ͳͯ͘ɺ
ଘࡏʹ͖ͱͨͬͳʹܕফඅ͞ΕΔ
31. func calculate(_ value: some BinaryInteger) { ⋯ }
func something(_ value: consuming Int) {
calculate(value)
}
Ṗϧʔϧ
ෆಁ໌ͯ͠ͱܕফඅରΛ͢ͱ͖
WBMVF͕ফඅରͷͱ͖ɺ
ෆಁ໌ܕΛैདྷ௨Γʹड͚औΔ૬खʹͯ͠ɺ
ফඅ͞Εͳ͍
ʢṖʣ
˞ ҙਤͨ͠ಈ࡞ͳͷ͔ෆ໌
˞ ͦͷ΄͔ͷ͠ํɺ௨ৗͷܕͷͱ͖ͱಉ༷