Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Tomoki Ota ʲGoݴޠʳΠςϨʔλ
Slide 2
Slide 2 text
ΠςϨʔλͱʁ ֎෦ΠςϨʔλ&෦ΠςϨʔλ Iteratorύλʔϯ Visitorύλʔϯ δΣωϨʔλ GoͷΠςϨʔλ ΞδΣϯμ 2
Slide 3
Slide 3 text
ΠςϨʔλͱʁ
Slide 4
Slide 4 text
ΠςϨʔλͱʁ 4 ΠςϨʔλ(෮ࢠ) : σʔλू߹ͷཁૉʹॱ൪ʹΞΫηε͢ΔͨΊͷΈ
Slide 5
Slide 5 text
ΠςϨʔλͱʁ 5 ίϨΫγϣϯͷཁૉͷྻڍɾ෮ͷํ๏ʹɺ2ͭͷํ͕ࣜ͋Δɻ •෦ΠςϨʔλ •֎෦ΠςϨʔλ
Slide 6
Slide 6 text
֎෦ΠςϨʔλ&෦ΠςϨʔλ
Slide 7
Slide 7 text
֎෦ΠςϨʔλ 7 ίϯςφͷཁૉΛॱʹऔΓग़ͨ͢ΊͷผͷΦϒδΣΫτΛ༻ҙ͢Δํࣜ(Java, C++ͳͲ) ίϯςφͷཁૉΛॱʹऔΓग़ͨ͢ΊͷผͷΦϒδΣΫτΛΠςϨʔλ(Χʔιϧ)ͱݺͿɻ •࣮͕͍͠ •ίʔυ͕ෳࡶ •ෳͷίϯςφ͔ΒҰͭͣͭཁૉΛऔΓग़͠ ฒߦʹॲཧ͢ΔΑ͏ͳखଓ͖͕ಘҙ
Slide 8
Slide 8 text
෦ΠςϨʔλ 8 ݸʑͷཁૉ͝ͱͷॲཧΛදݱ͢ΔͷΛίϯςφɾΦϒδΣΫτͷϝιουʹ͠ɼ ϝιου͕ཁૉ͝ͱͷॲཧΛݺͼฦ͢λΠϓͷ܁Γฦ͠ํࣜ(RubyͳͲ) • ͏ͷ࡞Δͷ؆୯ • Ϋϩʔδϟ͕ͳ͍ͱϧʔϓຊମͱ֎ଆͱͰใΛڞ༗͢ΔͨΊʹ ͕ඞཁʹͳΔͷͰɺ͍উख͕ѱ͘ͳΔɻ
Slide 9
Slide 9 text
Itaratorύλʔϯ
Slide 10
Slide 10 text
Itaratorύλʔϯ 10 GoFʹΑͬͯఆٛ͞ΕͨσβΠϯύλʔϯͷ1ͭɻ ΠςϨʔλΛ༻͢Δ͜ͱͰɺϦετɺ ελοΫɺ πϦʔͳͲͷ ࣮ࡍͷσʔλߏΛҙࣝͤͣʹɺཁૉΛ୳ࡧ͢Δ͜ͱ͕Ͱ͖Δɻ
Slide 11
Slide 11 text
Itaratorύλʔϯ 11 ந ۩
Slide 12
Slide 12 text
ItaratorύλʔϯͷϝϦοτ 12 • ୯Ұͷݪଇɻ ͔͞Δ୳ࡧΞϧΰϦζϜΛผΫϥεʹநग़͢Δ͜ͱʹΑΓ ΫϥΠΞϯτɾίʔυͱίϨΫγϣϯͷཧ͕Մೳ • ΦʔϓϯɾΫϩʔζυͷݪଇɻ ৽͍͠छྨͷίϨΫγϣϯͱΠςϨʔλʔΛ࣮͠ طଘͷίʔυʹͳ͘͢͜ͱ͕Մೳ • ֤ΠςϨʔλʔɾΦϒδΣΫτ͕ࣗͷ෮ঢ়ଶΛ͍࣋ͬͯΔͨΊ ಉ͡ίϨΫγϣϯΛฏߦͯ͠෮Մೳ • ಉ͡ཧ༝Ͱɺ ෮ΛҰ࣌தஅͯ͠ඞཁͳ࣌ʹ࠶։͢Δ͜ͱ͕Մೳ
Slide 13
Slide 13 text
ItaratorύλʔϯͷϝϦοτ 13 •ΞϓϦ͕୯७ͳίϨΫγϣϯͱͷΈಈ࡞͢Δ߹ ͜ͷύλʔϯͷద༻ͳՄೳੑ͕͋Δ •ಛఆͷಛघͳίϨΫγϣϯͷ߹ɺ ΠςϨʔλʔͷ༻ ཁૉΛݟͯߦ͘ΑΓඇޮͳՄೳੑ͕͋Δ
Slide 14
Slide 14 text
Visitorύλʔϯ
Slide 15
Slide 15 text
Itaratorύλʔϯ v.s Visitorύλʔϯ 15 Itaratorύλʔϯ : ίϨΫγϣϯͷཁૉʹॱʹ̍ͭͣͭΞΫηε͢Δ Visitorύλʔϯ : ίϨΫγϣϯͷཁૉΛ̍ͭ̍ͭ८ͬͯɺԿΒ͔ͷॲཧΛ ߦ͍ͬͯ͘
Slide 16
Slide 16 text
Itaratorύλʔϯ v.s Visitorύλʔϯ 16
Slide 17
Slide 17 text
δΣωϨʔλ
Slide 18
Slide 18 text
δΣωϨʔλͱ 18 ΠςϨʔλΛ؆୯ʹ࡞Δ͜ͱ͕Ͱ͖ΔɻΠςϨʔλΛฦؔ͢ δΣωϨʔλؔͱ͍͏ɻ ·ͨɺδΣωϨʔλؔͰ࡞͞ΕͨΠςϨʔλͷ͜ͱΛ δΣωϨʔλͱݺͿ͜ͱ͋Δɻ
Slide 19
Slide 19 text
GoͷΠςϨʔλ
Slide 20
Slide 20 text
range over int
Slide 21
Slide 21 text
range over int 21 Go1.22Ҏ߱ Go1.22Ҏલ
Slide 22
Slide 22 text
range over func
Slide 23
Slide 23 text
range over func 23 GoͷΠςϨʔλͷσϑΝΫτελϯμʔυ
Slide 24
Slide 24 text
v1.23ҎલͷΠςϨʔλ 24 database/sql.Rows archive/tar.Reader.Next
Slide 25
Slide 25 text
range over func 25 ҎԼͷγάωνϟͷؔΛrangeͰ෮ॲཧͰ͖Δɻ
Slide 26
Slide 26 text
range over func 26
Slide 27
Slide 27 text
range over func 27 rangeͰyieldΛ༻͢Δ͜ͱ͕Ͱ͖ΔΑ͏ʹͳͬͨɻ
Slide 28
Slide 28 text
GoͷΠςϨʔλ 28 • Push(ඪ४)ΠςϨʔλ : 1ͭͣͭσʔλΛ͢ • PullΠςϨʔλ : 1ͭͣͭσʔλΛड͚औΔ
Slide 29
Slide 29 text
func(func()bool) 29
Slide 30
Slide 30 text
30 func(func(V)bool)
Slide 31
Slide 31 text
func(func(K, V)bool) 31
Slide 32
Slide 32 text
iterύοέʔδ
Slide 33
Slide 33 text
iterύοέʔδ 33 https://github.com/golang/go/tree/go1.23.0/src/iter 1.23ͰՃ͞Εͨ
Slide 34
Slide 34 text
PushΠςϨʔλ 34
Slide 35
Slide 35 text
PushΠςϨʔλ 35
Slide 36
Slide 36 text
PushΠςϨʔλ 36 iter.Seq ͷ༰Λશͯը໘ʹදࣔ͢Δྫ
Slide 37
Slide 37 text
PushΠςϨʔλ 37
Slide 38
Slide 38 text
PushΠςϨʔλ 38
Slide 39
Slide 39 text
PullΠςϨʔλ 39
Slide 40
Slide 40 text
PullΠςϨʔλ 40 • PushܕͷΠςϨʔλΛPullܕʹม͢Δ • next ΠςϨʔλͷ࣍ͷͱɺ༗ޮͳ͕͋Δ͔Ͳ͏͔ͷਅِΛฦ͢ • stop ΠςϨʔλΛऴྃͤ͞Δ • stop Λݺͼग़ͨ͠ޙɺnext ͔Βθϩͱfalse͕ৗʹฦΔ
Slide 41
Slide 41 text
PullΠςϨʔλ 41
Slide 42
Slide 42 text
ඪ४Ξμϓλؔ
Slide 43
Slide 43 text
Adapter 43 ͷγʔέϯεΛϑΟϧλʔͯ͠৽͍͠γʔέϯεΛฦؔ͢
Slide 44
Slide 44 text
Adapter 44