Slide 1

Slide 1 text

ͩͬͨΒɺԶ͕ ୅ΘΓʹ΍ͬͯ΍Δʂ  4XJGU;PPNJOνϟϨϯδʙ'BU7JFX$POUSPMMFSΛ౗ͤʂʙ ใࠂձ

Slide 2

Slide 2 text

"CPVU.F w ͻΖΜʢҰٶߒڭʣ w 5XJUUFS(JU)VC2JJUB 4MJEF4IBSF4QFBLFS%FDL ˠIJSPOZUJD w ಙౡࡏॅ w ීஈ͸'BU7JFX$POUSPMMFS ͱઓΘͣʹɺͲ͏෇͖߹ͬ ͍͔ͯ͘Λߟ͍͑ͯ·͢

Slide 3

Slide 3 text

Ͱ͖͕͋ͬͨ΋ͷ w IUUQTHJUIVCDPNIJSPOZUJDSFWFSTJJPT w ΞʔΩςΫνϟύλʔϯɿ .77. 3FEVY w ࢖༻ϑϨʔϜϫʔΫɿ 6*,JUɺ$PNCJOF

Slide 4

Slide 4 text

ϦϑΝΫλϦϯάΛ ͲͷΑ͏ʹਐΊ͍͔ͯͬͨ

Slide 5

Slide 5 text

νϟϨϯδ౰೔ ͷࣗ෼ͷϝϞ w σΟεΫຕ਺Χ΢ϯτcountDisks(of:)  w σΟεΫຕ਺ͷଟ͍ํΛฦ͢sideWithMoreDisks()  w σΟεΫΛஔ͚Δ͔Ͳ͏͔ௐ΂ΔcanPlaceDisk(_:atX:y:)  w σΟεΫΛஔ͚Δ৔ॴΛฦ͢validMoves(for:)  w σΟεΫΛஔ͘placeDisk(_:atX:y:animated:completion:)

Slide 6

Slide 6 text

νϟϨϯδ౰೔ʙཌ೔ #PBSE7JFX 7JFX $POUSPMMFS ˣ͜ͷ࣌఺ͷϘʔυ #PBSE ϓϩτίϧ ʢ˞ҙຯ͸ͳ͔ͬͨʣ 3FWFSTJ -PHJDT FYUFOTJPO ˞placeDisk()͸Ξχϝʔ γϣϯͷΩϟϯηϧॲཧΛ ViewController͕͍࣋ͬͯ ͨΓͯ͠ɺ͍ͼͭͳঢ়ଶ IUUQTHJUIVCDPNIJSPOZUJDSFWFSTJJPTQVMM

Slide 7

Slide 7 text

ಘΒΕͨ΋ͷ w ʮͳΜ͔΍ͬͨͬͨʯͱ͍͏ຬ଍ײ

Slide 8

Slide 8 text

Ϧόʔγ൫ΛϞσϧͱϏϡʔʹ෼཭ ͷࣗ෼ͷϝϞ BoardView΋ ͍࣋ͬͯΔػೳ 3FWFSTJ-PHJDT ͷػೳ struct CellChange: Hashable { var x: Int var y: Int var disk: Disk? } struct Board { ... mutating func placeDisk(_ disk: Disk, atX x: Int, y: Int) throws -> [CellChange] { ... } } IUUQTHJUIVCDPNIJSPOZUJDSFWFSTJJPTQVMM

Slide 9

Slide 9 text

ಘΒΕͨ΋ͷ w Ϙʔυͷঢ়ଶͱը໘Λ੾Γ཭ͤͨ w Ϧόʔγͷϧʔϧʹجͮ͘มߋ͔͠ߦ͑ͳ͍҆શ ੑʢྫ͑͹ͻͬ͘ΓฦΒͳ͍ͱ͜ΖʹσΟεΫΛ ஔ͘͜ͱ͸Ͱ͖ͳ͍ʣ w 3FWFSTJ-PHJDTͷςετίʔυ

Slide 10

Slide 10 text

ήʔϜਐߦΛ෼཭͍͕ͨ͠ʜ w ͳΜͱͳ͘.77. w ϘʔυҎ֎ͷ6*ͷଘࡏ Λ๨Ε͍ͯΔ w ਐߦͷྲྀΕ͕੔ཧͰ͖ͯ ͍ͳ͍ w Ξχϝʔγϣϯ΍Ξϥʔ τ͸7JFX૚ͷ੹຿ͱߟ ͍͑ͯΔ ͷࣗ෼ͷϝϞ

Slide 11

Slide 11 text

ήʔϜਐߦͷྲྀΕΛ੔ཧ ͷࣗ෼ͷϝϞ

Slide 12

Slide 12 text

ը໘ 7JFX ͷೖग़ྗ΋੔ཧ ͷࣗ෼ͷϝϞ

Slide 13

Slide 13 text

ήʔϜͷہ໘͕ঢ়ଶભҠ͢Δͱߟ͑ͨ ͷࣗ෼ͷϝϞ

Slide 14

Slide 14 text

ঢ়ଶભҠͱ͍͑͹ʜ3FEVY ͷࣗ෼ͷϝϞ .PEFM 7JFX 7JFX.PEFM 3FEVY

Slide 15

Slide 15 text

Ϟσϧͷ෦෼Λ3FEVY෩ʹ࣮૷ w ΊͬͪΌࢼߦࡨޡͨ͠  3FEVY͸஌ࣝͱͯ͠஌͍͚ͬͯͨͩͩͬͨʢ'MVY͸ܦݧ͋Γʣ

Slide 16

Slide 16 text

ϑΣʔζͱ͍͏ಠࣗ֓೦ public protocol Reducer { /// ΞΫγϣϯʹԠͯ͡ঢ়ଶΛมߋ͠·͢ɻ /// - Parameters: /// - state: มߋલͷঢ়ଶͰ͢ɻ /// - action: ঢ়ଶมߋΛཁٻ͢ΔΞΫγϣϯͰ͢ɻ /// - Returns: มߋޙͷঢ়ଶΛฦ͠·͢ɻ static func reduce(state: State, action: Action) -> State } public protocol Phase: Reducer, Hashable, CustomStringConvertible { /// ϑΣʔζछผͰ͢ɻ var kind: PhaseKind { get } /// ผͷϑΣʔζ͔Β͜ͷϑΣʔζʹભҠ͢Δͱ͖ʹݺ͹Ε·͢ɻ /// ඞཁʹԠͯ͡αϯΫΛฦ͢͜ͱ͕Ͱ͖·͢ɻ /// - Parameters: /// - previousPhase: ҎલͷϑΣʔζ͕౉͞Ε·͢ɻ static func onEnter(previousPhase: AnyPhase) -> Thunk? /// ͜ͷϑΣʔζ͔ΒผͷϑΣʔζʹભҠ͢Δͱ͖ʹݺ͹Ε·͢ɻ /// ඞཁʹԠͯ͡αϯΫΛฦ͢͜ͱ͕Ͱ͖·͢ɻ /// - Parameters: /// - state: ݱࡏͷঢ়ଶͰ͢ɻ /// - nextPhase: ࣍ͷϑΣʔζ͕౉͞Ε·͢ɻ static func onExit(nextPhase: AnyPhase) -> Thunk? } ͷࣗ෼ͷϝϞ

Slide 17

Slide 17 text

Ϟσϧͷ෦෼Λ3FEVY෩ʹ࣮૷ w ΊͬͪΌࢼߦࡨޡͨ͠  3FEVY͸஌ࣝͱͯ͠஌͍͚ͬͯͨͩͩͬͨʢ'MVY͸ܦݧ͋Γʣ w ຊՈ3FEVYͷαΠτͱɺؔ࿈ٕज़Λݟ௚ͨ͠Γ ‣ IUUQTSFEVYKTPSH ‣ IUUQTHJUIVCDPNSFEVYKTSFEVYUIVOL ‣ IUUQTHJUIVCDPNSFEVYMPPQSFEVYMPPQ w ΊͬͪΌษڧʹͳΓ·ͨ͠ɹʜ͕͋·Γग़དྷʹࣗ৴͸ͳ͍

Slide 18

Slide 18 text

Ϟσϧͷ෦෼ͷ࣮૷͕ͻͱͱ͓ΓऴΘΓʜ ΄Μͷগ͠ςετίʔυΛॻ͍ͯಈ࡞Λ֬ೝ ࢒Γͷςετ͸͍ͬͨΜอཹͯ͠ɺ7JFX.PEFMͷ࣮૷ʹ IUUQTHJUIVCDPNIJSPOZUJDSFWFSTJJPTQVMM

Slide 19

Slide 19 text

7JFX.PEFMΛ࣮૷ɺͦͯ͠ʜ 7JFX$POUSPMMFSͱ΋઀ଓ IUUQTHJUIVCDPNIJSPOZUJDSFWFSTJJPTQVMM

Slide 20

Slide 20 text

࣮ࡍʹಈ͔ͤͯ༡΂Δ

Slide 21

Slide 21 text

ಾػೳͷര஀ w ஔ͚ͳ͍ͱ͜Ζʹஔ͜͏ͱ͢Δͱ w ίϯϐϡʔλʔ͕উखʹߟ͑ͯஔ͍ ͯ͘ΕΔ w ʮͩͬͨΒɺ ɹԶ͕୅ΘΓʹ΍ͬͯ΍Δʂʯػೳ ʢ˞όάʣ

Slide 22

Slide 22 text

Ϟσϧ૚ͷςετΛॆ࣮ͤ͞Δ w ঢ়ଶભҠਤΛॻ ͖ͳ͓ͨ͠ w ͜ΕΛݟͳ͕Β ςετέʔεΛ ࡞ͬͨ ʙͷࣗ෼ͷϝϞ

Slide 23

Slide 23 text

ʮͩͬͨΒɺԶ͕୅ΘΓʹ΍ͬͯ΍Δʯػೳ

Slide 24

Slide 24 text

.PEFMͱ7JFX.PEFMͱͷࠩ w .PEFMʹ͸7JFXͷߏ଄Λҙࣝͨ͠4UBUF͸͍࣋ͨͤͯͳ ͍ʢྫɿλʔϯදࣔ΍উഊදࣔʹ %JTL7JFXΛ࢖͏ͳͲʣ w 7JFX.PEFM͸7JFXͷߏ଄Λڧ͘ҙࣝͯ͠ɺͳΔ΂ͦ͘ͷ ··όΠϯσΟϯάͰ͖ΔΑ͏ʹσʔλΛՃ޻ w 7JFXͱ7JFX.PEFMΛ෼͚Δҙຯ͸ʁ ˠςετ͕ॻ͚Δ 7JFX.PEFMͷςετΛॻ͍͍ͯͳ͔ͬͨ

Slide 25

Slide 25 text

ָ͍͠(8Λ ա͢͜͝ͱ͕Ͱ͖·ͨ͠

Slide 26

Slide 26 text

͝ਗ਼ௌ͋Γ͕ͱ͏͟͝·ͨ͠