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

Sequenceを理解する

taro
April 07, 2023

 Sequenceを理解する

Server-Side Kotlin Meetup vol.8 『初オフラインLT大会!』で使用した資料です!
https://server-side-kotlin-meetup.connpass.com/event/274359/

taro

April 07, 2023
Tweet

More Decks by taro

Other Decks in Programming

Transcript

  1. Sequenceを理解する
    Server-Side Kotlin Meetup vol.8
    2023.4.7
    taro(@taroro_tarotaro)

    View full-size slide

  2. 自己紹介
    ● Ohnishi Taro( @taroro_tarotaro)
    ● 3末まで建設SaaS開発→無職
    ● 前職で1年弱ほどServer Side Kotlinを書いていました

    View full-size slide

  3. はじめに

    View full-size slide

  4. はじめに
    Sequenceに対する僕のイメージ
    ● Collection操作のパフォーマンス改善で使う…
    ● 遅延評価…
    ● ちょっとむずかしそうだけど、いまいち原理がわからない…

    View full-size slide

  5. はじめに
    Sequenceに対する僕のイメージ
    ● Collection操作のパフォーマンス改善で使う…
    ● 遅延評価…
    ● ちょっとむずかしそうだけど、いまいち原理がわからない…
    →理解してみよう!

    View full-size slide

  6. Sequenceのおさらい

    View full-size slide

  7. Sequenceのおさらい
    filterしてmapしてtakeする

    View full-size slide

  8. Sequenceのおさらい
    filterしてmapしてtakeする

    View full-size slide

  9. Sequenceのおさらい
    2件のみなのに全件に対してfilterしてmapしている…

    View full-size slide

  10. Sequenceのおさらい
    Sequenceを使うと要素ごとに操作できる!

    View full-size slide

  11. Collectionは
    何をしているのか

    View full-size slide

  12. Collectionは何をしているのか
    CollectionのOperation Chainでやっていること
    →関数でラップしている(関数の返り値を次の関数の引数に渡している)

    View full-size slide

  13. Collectionは何をしているのか
    CollectionのOperation Chainでやっていること
    →関数でラップしている(関数の返り値を次の関数の引数に渡している)
    ※コードはイメージです(動きません)

    View full-size slide

  14. Sequenceは
    何をしているのか

    View full-size slide

  15. Sequenceは何をしているのか
    SequenceのOperation Chainでやりたいこと
    →各要素ごとに実行する操作関数を追加する

    View full-size slide

  16. Sequenceは何をしているのか
    SequenceのOperation Chainでやりたいこと
    →各要素ごとに実行する操作関数を追加する
    →クラスの委譲

    View full-size slide

  17. Sequenceは何をしているのか
    SequenceのOperation Chainでやりたいこと
    →クラスでラップする
    ※コードはイメージです(動きません)

    View full-size slide

  18. Sequenceは何をしているのか
    内部実装を見てみる(map)
    https://github.com/JetBrains/kotlin/blob/1.8.20/libraries/stdlib/src/kotlin/collections/Sequences.kt#L205

    View full-size slide

  19. Sequenceは何をしているのか
    CollectionのOperation Chain
    →関数でラップ
    SequenceのOperation Chain
    →クラスでラップ

    View full-size slide

  20. Sequenceは何をしているのか
    CollectionのOperation Chain
    →関数でラップ
    クラスでラップしているだけなので、iterator()が実行されるまで評価されない
    →遅延評価も自然に理解できる
    SequenceのOperation Chain
    →クラスでラップ

    View full-size slide

  21. Kotlin関係ある?

    View full-size slide

  22. Kotlin関係ある?
    Kotlinは既存クラスに対して簡単に拡張関数を作れる!

    View full-size slide

  23. まとめ
    ● Sequenceを使うと要素ごとに操作ができ評価を遅らせられる
    ● Collection関数は関数でラップしているのに対して、Sequence関数はクラスでラッ
    プしている
    ● Kotlinって表現力が強いこそ中身知ってみるのは大切かも

    View full-size slide

  24. ありがとうございました!

    View full-size slide