Slide 1

Slide 1 text

TXJGUʹ͓͚Δ ஗ԆධՁ $POOFIJUP.BSDIÉˌʙJ04ࢢʙ

Slide 2

Slide 2 text

ॴଐɿίωώτגࣜձࣾ ۀ຿ɿJ04ΞϓϦ։ൃ

Slide 3

Slide 3 text

ͦ΋ͦ΋ ஗ԆධՁͱ͸

Slide 4

Slide 4 text

݁Ռ͕ඞཁʹͳΔ·Ͱؔ਺Λ࣮ߦ͠ͳ͍͜ͱ CZ͍͢͝)ຊ

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

class LazyCat { var name = "" lazy var selfIntro: String = { return "໊લ͸\(name)Ͱ͢" }() } let cat = LazyCat() cat.name = "γϩίϚ" print(cat.selfIntro) // selfIntro͕ॳظԽ͞ΕΔ // ໊લ͸γϩίϚͰ͢ cat.name = "ΫϩίϚ" print(cat.selfIntro) // ΫϩίϚ͸൓ө͞Εͳ͍ʂ // ໊લ͸γϩίϚͰ͢ ॳΊͯࢀরͨ͠ ඞཁʹͳͬͨ ࣌ʹॳظԽ͞ΕΔʂ

Slide 7

Slide 7 text

TXJGUʹ͸ओʹ छྨͷ࢖͍ํ͕͋Δ MB[ZQSPQFSUZ MB[ZDPMMFDUJPO

Slide 8

Slide 8 text

MB[ZQSPQFSUZ

Slide 9

Slide 9 text

MB[ZQSPQFSUZ ɾMB[Zम০ࢠΛ͚ͭΔ͜ͱͰએݴͰ͖Δ ɾॳճΞΫηε࣌ʹ஋͕ॳظԽ͞ΕΔ ɾMB[Zम০ࢠ͸WBSʹ͔͚ͭ͠ΒΕͳ͍ class LazyCat { lazy var name = "γϩίϚ" }

Slide 10

Slide 10 text

ͳͥWBS͚ͩʁ ఆ਺ MFU ͸ΠϯελϯεͷॳظԽ׬ྃ࣌ʹ஋Λ อ͍࣋ͯ͠ͳ͚Ε͹ͳΒͳ͍ MB[ZΛ͚ͭΔͱॳظԽ࣌Ͱ͸ͳ͘ΞΫηε࣌ʹ ஋͕อ࣋͞ΕΔΑ͏ʹͳΔ

Slide 11

Slide 11 text

Կ͕خ͍͠ͷ͔ ɾॳظԽ࣌ʹTFMG͕࢖͑Δ ɾෆཁͳBMMPDBUJPO͕ൃੜ͠ͳ͍

Slide 12

Slide 12 text

class LazyCat { var name = "γϩίϚ" lazy var selfIntro: String = { return "໊લ͸\(self.name)Ͱ͢" }() var selfIntroduction: String = { return "໊લ͸\(self.name)Ͱ͢" }() // error: Use of unresolved identifier 'self' } DMPTVSF಺ͰΠϯελϯεม਺ʹΞΫηεͰ͖Δʂ ॳظԽ࣌ʹTFMG͕࢖͑Δ

Slide 13

Slide 13 text

class LazyCat { lazy var lazyName = name() var normalName = name() // Cannot use instance member 'name' within property initializer // property initializers run before 'self' is available func name() -> String { return "γϩίϚ" } } ΠϯελϯεϝιουͰॳظԽͰ͖Δ ॳظԽ࣌ʹTFMG͕࢖͑Δ

Slide 14

Slide 14 text

class LazyCat { lazy var ja = "ʹΌʙ" lazy var en = "mew" } let cat = LazyCat() // ͲͪΒ΋allocate͞Ε͍ͯͳ͍ print(cat.ja) // english͸allocate͞Εͳ͍ ඞཁͳ࣌ʹBMMPDBUJPO͕ൃੜ͢ΔͨΊ ϝϞϦΛઅ໿Ͱ͖Δ ෆཁͳBMMPDBUJPO͕ൃੜ͠ͳ͍

Slide 15

Slide 15 text

MB[ZDPMMFDUJPO

Slide 16

Slide 16 text

NBQ pMUFSͳͲ͕ ஗ԆධՁ͞ΕΔDPMMFDUJPO

Slide 17

Slide 17 text

let array = Array(1...10) let lazyArray = array.lazy MB[ZͰऔಘͰ͖Δʂ

Slide 18

Slide 18 text

NBQ pMUFSͷධՁ

Slide 19

Slide 19 text

௨ৗͷDPMMFDUJPOͷڍಈ let array = Array(1...10) let normalArray = array.map { value -> Int in print(value) return value * 2 } .filter { value in print(value) return value < 10 }

Slide 20

Slide 20 text

௨ৗͷDPMMFDUJPOͷڍಈ let array = Array(1...10) let normalArray = array.map { value -> Int in print(value) return value * 2 } .filter { value in print(value) return value < 10 } 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20

Slide 21

Slide 21 text

௨ৗͷDPMMFDUJPOͷڍಈ let array = Array(1...10) let normalArray = array.map { value -> Int in print(value) return value * 2 } .filter { value in print(value) return value < 10 } print(normalArray.first) 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 Optional(2)

Slide 22

Slide 22 text

௨ৗͷDPMMFDUJPOͷڍಈ let array = Array(1...10) let normalArray = array.map { value -> Int in print(value) return value * 2 } .filter { value in print(value) return value < 10 } print(normalArray.first) 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 Optional(2) < > ˣ < > ˣ < > ˣ NBQ\^ pMUFS\^ pSTU

Slide 23

Slide 23 text

௨ৗͷDPMMFDUJPOͷڍಈ let array = Array(1...10) let normalArray = array.map { value -> Int in print(value) return value * 2 } .filter { value in print(value) return value < 10 } print(normalArray.first) 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 Optional(2) < > ˣ < > ˣ < > ˣ NBQ\^ pMUFS\^ pSTU ແବ͕ଟ͍

Slide 24

Slide 24 text

MB[ZDPMMFDUJPOͷڍಈ let array = Array(1...10) let lazyArray = array.lazy .map { value -> Int in print(value) return value * 2 } .filter { value in print(value) return value < 10 }

Slide 25

Slide 25 text

MB[ZDPMMFDUJPOͷڍಈ let array = Array(1...10) let lazyArray = array.lazy .map { value -> Int in print(value) return value * 2 } .filter { value in print(value) return value < 10 } ϩά͕දࣔ͞Εͳ͍

Slide 26

Slide 26 text

MB[ZDPMMFDUJPOͷڍಈ let array = Array(1...10) let lazyArray = array.lazy .map { value -> Int in print(value) return value * 2 } .filter { value in print(value) return value < 10 } print(lazyArray.first) 1 2 Optional(2) pSTUʹΞΫηεͨ࣌͠ʢඞཁʹͳͬͨ࣌ʣʹ ඞཁͳ෼͚ͩNBQ pMUFS͕ධՁ͞ΕΔʂ

Slide 27

Slide 27 text

MB[ZDPMMFDUJPOͷڍಈ let array = Array(1...10) let lazyArray = array.lazy .map { value -> Int in print(value) return value * 2 } .filter { value in print(value) return value < 10 } print(lazyArray.first) 1 2 Optional(2) pSTUʹΞΫηεͨ࣌͠ʢඞཁʹͳͬͨ࣌ʣ ඞཁͳ෼͚ͩNBQ pMUFS͕ධՁ͞ΕΔʂ < > ˣ <> ˣ <> ˣ NBQ\^ pMUFS\^ pSTU

Slide 28

Slide 28 text

MB[ZDPMMFDUJPOͷڍಈ let array = Array(1...10) let lazyArray = array.lazy .map { value -> Int in print(value) return value * 2 } .filter { value in print(value) return value < 10 } print(lazyArray.first) 1 2 Optional(2) pSTUʹΞΫηεͨ࣌͠ʢඞཁʹͳͬͨ࣌ʣ ඞཁͳ෼͚ͩNBQ pMUFS͕ධՁ͞ΕΔʂ < > ˣ <> ˣ <> ˣ NBQ\^ pMUFS\^ pSTU ແବ͕ͳ͍ʂ

Slide 29

Slide 29 text

·ͱΊ TXJGUͷ஗ԆධՁ ɾMB[ZQSPQFSUZ ɾMB[ZDPMMFDUJPO MB[ZQSPQFSUZ ɾॳظԽ࣌ʹTFMGΛ࢖͑Δ ɾϝϞϦΛઅ໿Ͱ͖Δ MB[ZDPMMFDUJPO ɾNBQ pMUFSར༻࣌ʹඞཁͳ෼͚ͩධՁ͞ΕΔ