Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

はじめに

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Sequenceのおさらい

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

Collectionは 何をしているのか

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

Sequenceは 何をしているのか

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

Kotlin関係ある?

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

まとめ

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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