Swiftを使っているみなさんなら非同期処理というとGCDやRxSwift、そしてSwift5で実現されるかもしれないasync/awaitを想像するかと思います。 async/awaitが現実に近づいてきた今どの方法で非同期処理を実装するべきか、Rxのstreamが欲しいケース、Promiseが欲しいケース、私の考えるそれぞれの使用シーンを説明します。
࣍ ੈ ͷ ඇ ಉ ظ ॲ ཧ ͜ ͏ ͬͯ ͍ ͚ Δ ʂ 5 3 : 4 8 * ' 5 1 3 & 5" - , 4 : 6 5" " # &
View Slide
2ࣗݾհѨ෦༏ଠ!ZVUBBCF$6/&-803,$0 -5%JO/**("5"J04"OESPJE%FWFMPQFSʜͷͣ3FBDU&4Yɾ(PMBOH1)1FS,BJHJͰ-5͠·͢
3࣍"HFOEB3FBDUJWF&YUFOTJPOTԿ͕͍͍ͷ͔ͳͥΒBTZODBXBJUΛཉ͕͠Δͷ͔1SPNJTFͳͷ͔4USFBNͳͷ͔
3FBDUJWF&YUFOTJPOTԿ͕͍͍ͷ͔What is ReactiveExtensions good for …
5Կͬͯɺͭ·Γʜ
6Β࣌Λࢧ͢Δ͜ͱʹޭͨ͠ɻ
7ΛखʹೖΕͨʁ
8
9Β࣌Λࢧ͢Δ͜ͱΛޭͨ͠ɻ
10Β࣌Λࢧ͢Δ͜ͱΛޭͨ͠ɻΠϕϯτͷྲྀΕΛ্࣌ؒ࣠ͰετϦʔϜͱͯ͠ѻ͍͔ͬͨ͢ɻ
11ࢹՄೳ 0CTFSWBCMFͳͷΛ࡞ΓʜΠϕϯτΛߪಡ 4VCTDSJCF͢Δͱʜޭɾࣦഊ PO/FYU PSPO&SSPS Λڭ͑ͯ͘Εͨ0CTFSWBCMF؍ର0CTFSWFS؍͢Δ4VCTDSJCF
12ΠϕϯτͷྲྀΕΛ্࣌ؒ࣠ͰετϦʔϜͱͯ͠ѻ͍͔ͬͨ͢ɻඇಉظॲཧ͕؆୯ʹѻ͍͘͢ͳͬͨ
13ΠϕϯτͷྲྀΕΛ্࣌ؒ࣠ͰετϦʔϜͱͯ͠ѻ͍͔ͬͨ͢ɻඇಉظॲཧ͕؆୯ʹѻ͍͘͢ͳͬͨ
14
ͳͥΒBTZODBXBJUΛཉ͕͠Δͷ͔Why do we want “async/await”?
16ΠϕϯτͷྲྀΕΛ্࣌ؒ࣠ͰετϦʔϜͱͯ͠ѻ͍͔ͬͨ͢ɻඇಉظॲཧ͕؆୯ʹѻ͍͘͢ͳͬͨ
17ΠϕϯτͷྲྀΕΛ্࣌ؒ࣠ͰετϦʔϜͱͯ͠ѻ͍͔ͬͨ͢ɻඇಉظॲཧ͕؆୯ʹѻ͍͘͢ͳͬͨ
18func fetchAdminUser(uid: String) {self.loginGateway.fetchAdminUser(uid: uid).subscribe(onNext: { [weak self] adminUserEnitites in// do something}).disposed(by: self.disposeBag)}͜ΕɺಡΉͷʹͲΕ͘Β͍͔͔Δʁ
19func fetchAdminUser(uid: String) async {let entities = await self.loginGateway.fetchAdminUser(uid: uid)}͜͏ͳΒͲ͏ʁ
20func fetchAdminUser(uid: String) async {let entities = await self.loginGateway.fetchAdminUser(uid: uid)}͜͏ͳΒͲ͏ʁ
21func fetchAdminUser(uid: String) async {let entities = await self.loginGateway.fetchAdminUser(uid: uid)}͜͏ͳΒͲ͏ʁ
223Y͕ඞཁʹͳΔγʔϯɾ6*Πϕϯτͷड͚औΓɾෳΠϕϯτͷετϦʔϜ͕ඞཁͳΠϕϯτɾσʔλঢ়ଶͷࢹ %BUB#JOEJOHɾ୯७ͳ֎෦௨৴ͷSFRVFTUSFTQPOTF ୯ҰඇಉظΠϕϯτ
233Y͕ඞཁʹͳΔγʔϯɾ6*Πϕϯτͷड͚औΓɾෳΠϕϯτͷετϦʔϜ͕ඞཁͳΠϕϯτɾσʔλঢ়ଶͷࢹ %BUB#JOEJOHɾ୯७ͳ֎෦௨৴ͷSFRVFTUSFTQPOTF ୯ҰඇಉظΠϕϯτ
243Y͕ඞཁʹͳΔγʔϯɾ6*Πϕϯτͷड͚औΓɾ୯७ͳ֎෦௨৴ͷSFRVFTUSFTQPOTF ୯ҰඇಉظΠϕϯτɾෳΠϕϯτͷετϦʔϜ͕ඞཁͳΠϕϯτɾσʔλঢ়ଶͷࢹ %BUB#JOEJOH͜ΕΛͬͱ͍ܰͨ͘͠ʂ
253Y͕ඞཁʹͳΔγʔϯɾ6*Πϕϯτͷड͚औΓɾ୯७ͳ֎෦௨৴ͷSFRVFTUSFTQPOTF ୯ҰඇಉظΠϕϯτɾෳΠϕϯτͷετϦʔϜ͕ඞཁͳΠϕϯτɾσʔλঢ়ଶͷࢹ %BUB#JOEJOH͜ΕΛͬͱ͍ܰͨ͘͠ʂ୯७ͳΠϕϯτʹ·Ͱ3Y͍ͨ͘ͳ͍ʂ
1SPNJTFͳͷ͔4USFBNͳͷ͔Do you want “Promise” or “Stream”?
271SPNJTFͱɾʮ୯ҰͷඇಉظΠϕϯτʯΛѻ͏ɾBTZODGVODUJPOͷΓɾBTZODGVODUJPO͕SFUVSOͨ͠ΒQSPNJTF͕SFTPMWF͢ΔɾBTZODGVODUJPO͕UISPXͨ͠ΒQSPNJTF͕SFKFDU͢ΔɾBXBJUQSPNJTFͷ݁ՌΛͪɺฦͬͨΒ࠶։͢ΔҰൠతͳ
281SPNJTFͰेͳγʔϯɾ୯७ͳ"1*ίʔϧɾը૾ɾಈըͳͲૢ࡞ͷॏ͍ॲཧɾ࣌ݶരɾෳࡶͳΤϥʔϋϯυϦϯά͕ෆཁ UISPXTOPOUISPXJOHͰ͍͚Ε͍͍ɾฒྻॲཧෆཁ࣌ 'VUVSFͰ͍͚Ε͍͍
29ɾ୯ҰඇಉظΠϕϯτ1SPNJTFͰྑ͔ͬͨɾෳͷඇಉظॲཧ ΠϕϯτετϦʔϜ3Yͷຊ
30ɾ୯ҰඇಉظΠϕϯτ1SPNJTFͰྑ͔ͬͨɾෳͷඇಉظॲཧ ΠϕϯτετϦʔϜ3Yͷຊཉ͍͠ͷʮ1SPNJTFͳͷ͔4USFBNͳͷ͔ʯ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠