Upgrade to Pro — share decks privately, control downloads, hide ads and more …

optional chainingの話

yayoc
April 24, 2018

optional chainingの話

2018/04/24 Roppongi.js

yayoc

April 24, 2018
Tweet

More Decks by yayoc

Other Decks in Programming

Transcript

  1. Optional chainingの話
    Roppongi.js @yayoc

    View Slide

  2. Hello!
    I am 弥吉修英
    I am software engineer at Fast Retailing.
    Twitter: @yayoc_
    Github: @yayoc

    View Slide

  3. なにをやっているか?
    ○ SPAの実装
    ○ BFFの実装 ( 今日はここについての話など )
    CDN
    router
    SPA BFF
    Micro-service A Micro-service B Micro-service C Micro-service D

    View Slide

  4. Micro serviceとの付き合い
    ○ 10個以上のmicro serviceとREST APIでのやり取り
    ○ APIがnullやundefinedを返すことはよくある
    □ データの不整合だったり・・
    □ API仕様がPF間で若干違っていたり・・
    □ バグだったり・・

    View Slide

  5. 結果、TypeError
    Cannot read propertyが頻出度の高いエラーであるという話
    https://rollbar.com/blog/top-10-javascript-errors/
    肌感としてもよく分かる

    View Slide

  6. 解決策?
    1. && operator
    2. Ternary operator 3. Try catch
    どれも冗長さが否めない・・

    View Slide

  7. optional-chainingの
    proposal
    ○ .? の左側を計算して、undefined もしくは nullの場合は、
    undefinedを返す。そうでない場合は、素直にプロパティアク
    セスや関数実行を行う
    ○ 冗長な繰り返し記述やテンポラリな変数格納を避ける
    ○ ステータスはStage1
    ○ Swift, C#などにはある
    ○ https://tc39.github.io/proposal-optional-chaining/
    ○ TSにもまだない。( 議論は3年以上前からあるが・・
    https://github.com/Microsoft/TypeScript/issues/16

    View Slide

  8. optional-chain
    ○ optional-chainというライブラリを作ってみた
    https://github.com/yayoc/optional-chain
    ○ TSで書いたOption Typeを使った実装

    View Slide

  9. optional-chain
    ○ 間違ったプロパティアクセスに対しては、エラーを返す
    ○ この辺の実装は@utatti氏のlens実装をかなり参考に

    View Slide

  10. optional-chain
    ○ パターンマッチ, getOrElseなどのAPIも一応ある

    View Slide

  11. 結論
    ○ JSにおける、プロパティアクセスは悩みのタネ
    ○ optional chainingはスマートに解決してくれるので期待
    ○ optional-chainも解決してくれるかもしれない

    View Slide

  12. THANKS!
    ありがとうございました。
    Twitter: @yayoc_
    Github: @yayoc

    View Slide

  13. Appendix
    ○ https://github.com/paypal/api-standards/blob/master
    /api-style-guide.md#null
    ○ https://github.com/tc39/proposal-optional-chaining
    ○ https://github.com/yayoc/optional-chain
    ○ https://medium.com/@n_yayoshi/optional-chain-pro
    xy-brings-optional-chaining-75fff102acbd
    ○ https://developer.apple.com/library/content/docume
    ntation/Swift/Conceptual/Swift_Programming_Langu
    age/OptionalChaining.html

    View Slide

  14. CREDITS
    Special thanks to all the people who made and released
    these awesome resources for free:
    ○ Presentation template by SlidesCarnival
    ○ Photographs by Unsplash
    ○ Backgrounds by SubtlePatterns

    View Slide