$30 off During Our Annual Pro Sale. View Details »

次世代の非同期処理はこうやって使い分ける!

 次世代の非同期処理はこうやって使い分ける!

Swiftを使っているみなさんなら非同期処理というとGCDやRxSwift、そしてSwift5で実現されるかもしれないasync/awaitを想像するかと思います。
async/awaitが現実に近づいてきた今どの方法で非同期処理を実装するべきか、Rxのstreamが欲しいケース、Promiseが欲しいケース、私の考えるそれぞれの使用シーンを説明します。

yutaabe200
PRO

March 19, 2019
Tweet

More Decks by yutaabe200

Other Decks in Programming

Transcript

  1. ࣍ ੈ ୅ ͷ ඇ ಉ ظ ॲ ཧ ͸
    ͜ ͏ ΍ ͬͯ ࢖ ͍ ෼ ͚ Δ ʂ

    5 3 : 4 8 * ' 5 1 3 & 5" - , 4
    : 6 5" " # &

    View Slide

  2. 2
    ࣗݾ঺հ
    Ѩ෦༏ଠ
    !ZVUBBCF
    $6/&-803,$0 -5%JO/**("5"
    J04"OESPJE%FWFMPQFSʜͷ͸ͣ
    3FBDU&4Yɾ(PMBOH
    1)1FS,BJHJͰ-5͠·͢

    View Slide

  3. 3
    ໨࣍
    "HFOEB
    3FBDUJWF&YUFOTJPOT͸Կ͕͍͍ͷ͔
    ͳͥ๻Β͸BTZODBXBJUΛཉ͕͠Δͷ͔
    1SPNJTFͳͷ͔4USFBNͳͷ͔

    View Slide

  4. 3FBDUJWF&YUFOTJPOT͸Կ͕͍͍ͷ͔
    What is ReactiveExtensions good for …

    View Slide

  5. 5
    Կͬ
    ͯɺͭ·Γʜ

    View Slide

  6. 6
    ๻Β͸࣌Λࢧ഑͢Δ͜ͱʹ੒ޭͨ͠ɻ

    View Slide

  7. 7
    ΛखʹೖΕͨʁ

    View Slide

  8. 8

    View Slide

  9. 9
    ๻Β͸࣌Λࢧ഑͢Δ͜ͱΛ੒ޭͨ͠ɻ

    View Slide

  10. 10
    ๻Β͸࣌Λࢧ഑͢Δ͜ͱΛ੒ޭͨ͠ɻ
    Πϕϯτ΍஋ͷྲྀΕΛ্࣌ؒ࣠Ͱ
    ετϦʔϜͱͯ͠ѻ͍΍͔ͬͨ͢ɻ

    View Slide

  11. 11
    ؂ࢹՄೳ 0CTFSWBCMF
    ͳ΋ͷΛ࡞Γʜ
    ΠϕϯτΛߪಡ 4VCTDSJCF
    ͢Δͱʜ
    ੒ޭɾࣦഊ PO/FYU
    PSPO&SSPS

    Λڭ͑ͯ͘Εͨ
    0CTFSWBCMF
    ؍࡯ର৅
    0CTFSWFS
    ؍࡯͢Δ
    4VCTDSJCF

    View Slide

  12. 12
    Πϕϯτ΍஋ͷྲྀΕΛ্࣌ؒ࣠Ͱ
    ετϦʔϜͱͯ͠ѻ͍΍͔ͬͨ͢ɻ
    ඇಉظॲཧ͕؆୯ʹѻ͍΍͘͢ͳͬͨ

    View Slide

  13. 13
    Πϕϯτ΍஋ͷྲྀΕΛ্࣌ؒ࣠Ͱ
    ετϦʔϜͱͯ͠ѻ͍΍͔ͬͨ͢ɻ
    ඇಉظॲཧ͕؆୯ʹѻ͍΍͘͢ͳͬͨ

    View Slide

  14. 14

    View Slide

  15. ͳͥ๻Β͸BTZODBXBJUΛཉ͕͠Δͷ͔
    Why do we want “async/await”?

    View Slide

  16. 16
    Πϕϯτ΍஋ͷྲྀΕΛ্࣌ؒ࣠Ͱ
    ετϦʔϜͱͯ͠ѻ͍΍͔ͬͨ͢ɻ
    ඇಉظॲཧ͕؆୯ʹѻ͍΍͘͢ͳͬͨ

    View Slide

  17. 17
    Πϕϯτ΍஋ͷྲྀΕΛ্࣌ؒ࣠Ͱ
    ετϦʔϜͱͯ͠ѻ͍΍͔ͬͨ͢ɻ
    ඇಉظॲཧ͕؆୯ʹѻ͍΍͘͢ͳͬͨ

    View Slide

  18. 18
    func fetchAdminUser(uid: String) {
    self.loginGateway
    .fetchAdminUser(uid: uid)
    .subscribe(
    onNext: { [weak self] adminUserEnitites in
    // do something
    }).disposed(by: self.disposeBag)
    }
    ͜ΕɺಡΉͷʹͲΕ͘Β͍͔͔Δʁ

    View Slide

  19. 19
    func fetchAdminUser(uid: String) async {
    let entities = await self.loginGateway.fetchAdminUser(uid: uid)
    }
    ͜͏ͳΒͲ͏ʁ

    View Slide

  20. 20
    func fetchAdminUser(uid: String) async {
    let entities = await self.loginGateway.fetchAdminUser(uid: uid)
    }
    ͜͏ͳΒͲ͏ʁ

    View Slide

  21. 21
    func fetchAdminUser(uid: String) async {
    let entities = await self.loginGateway.fetchAdminUser(uid: uid)
    }
    ͜͏ͳΒͲ͏ʁ

    View Slide

  22. 22
    3Y͕ඞཁʹͳΔγʔϯ
    ɾ6*Πϕϯτͷड͚औΓ
    ɾෳ਺ΠϕϯτͷετϦʔϜ͕ඞཁͳΠϕϯτ
    ɾσʔλঢ়ଶͷ؂ࢹ %BUB#JOEJOH

    ɾ୯७ͳ֎෦௨৴ͷSFRVFTUSFTQPOTF ୯ҰඇಉظΠϕϯτ

    View Slide

  23. 23
    3Y͕ඞཁʹͳΔγʔϯ
    ɾ6*Πϕϯτͷड͚औΓ
    ɾෳ਺ΠϕϯτͷετϦʔϜ͕ඞཁͳΠϕϯτ
    ɾσʔλঢ়ଶͷ؂ࢹ %BUB#JOEJOH

    ɾ୯७ͳ֎෦௨৴ͷSFRVFTUSFTQPOTF ୯ҰඇಉظΠϕϯτ

    View Slide

  24. 24
    3Y͕ඞཁʹͳΔγʔϯ
    ɾ6*Πϕϯτͷड͚औΓ
    ɾ୯७ͳ֎෦௨৴ͷSFRVFTUSFTQPOTF ୯ҰඇಉظΠϕϯτ

    ɾෳ਺ΠϕϯτͷετϦʔϜ͕ඞཁͳΠϕϯτ
    ɾσʔλঢ়ଶͷ؂ࢹ %BUB#JOEJOH

    ͜ΕΛ΋ͬͱ͍ܰͨ͘͠ʂ

    View Slide

  25. 25
    3Y͕ඞཁʹͳΔγʔϯ
    ɾ6*Πϕϯτͷड͚औΓ
    ɾ୯७ͳ֎෦௨৴ͷSFRVFTUSFTQPOTF ୯ҰඇಉظΠϕϯτ

    ɾෳ਺ΠϕϯτͷετϦʔϜ͕ඞཁͳΠϕϯτ
    ɾσʔλঢ়ଶͷ؂ࢹ %BUB#JOEJOH

    ͜ΕΛ΋ͬͱ͍ܰͨ͘͠ʂ
    ୯७ͳΠϕϯτʹ·Ͱ3Y͸࢖͍ͨ͘ͳ͍ʂ

    View Slide

  26. 1SPNJTFͳͷ͔4USFBNͳͷ͔
    Do you want “Promise” or “Stream”?

    View Slide

  27. 27
    1SPNJTFͱ͸
    ɾʮ୯ҰͷඇಉظΠϕϯτʯΛѻ͏
    ɾBTZODGVODUJPOͷ໭Γ஋
    ɾBTZODGVODUJPO͕SFUVSOͨ͠ΒQSPNJTF͕SFTPMWF͢Δ
    ɾBTZODGVODUJPO͕UISPXͨ͠ΒQSPNJTF͕SFKFDU͢Δ
    ɾBXBJU͸QSPNJTFͷ݁ՌΛ଴ͪɺฦͬͨΒ࠶։͢Δ
    Ұൠతͳ

    View Slide

  28. 28
    1SPNJTFͰे෼ͳγʔϯ
    ɾ୯७ͳ"1*ίʔϧ
    ɾը૾ɾಈըͳͲૢ࡞ͷॏ͍ॲཧ
    ɾ࣌ݶര஄
    ɾෳࡶͳΤϥʔϋϯυϦϯά͕ෆཁ UISPXTOPOUISPXJOHͰ͍͚Ε͹͍͍

    ɾฒྻॲཧෆཁ࣌ 'VUVSFͰ͍͚Ε͹͍͍

    View Slide

  29. 29
    ɾ୯ҰඇಉظΠϕϯτ͸1SPNJTFͰྑ͔ͬͨ
    ɾෳ਺ͷඇಉظॲཧ ΠϕϯτετϦʔϜ
    ͸3Yͷຊ๬

    View Slide

  30. 30
    ɾ୯ҰඇಉظΠϕϯτ͸1SPNJTFͰྑ͔ͬͨ
    ɾෳ਺ͷඇಉظॲཧ ΠϕϯτετϦʔϜ
    ͸3Yͷຊ๬
    ཉ͍͠ͷ͸ʮ1SPNJTFͳͷ͔4USFBNͳͷ͔ʯ

    View Slide

  31. ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide