今年もKotlin Fest 2022に参加しました。
今回はオンラインでの開催、物理的な制約がないためか参加者が740以上もいて大きなコミュニティであることを再確認しました。
ノベルティ
毎回KotlinFestのノベルティは可愛く実用性も高いので今年も楽しみでした。トートバックめっちゃ愛用してます。
見たセッション
しっかり理解する Delegated properties
by lazy()
など緩い理解で利用してきたので、どのような実装になっているかきちんと理解するために視聴。
Java の進化と Kotlin の未来
PatterMatching
- Java19で実装されたPatterMatchingで分岐処理やりやすくなりそう。
- ただし、現在Kotlinでは書くことはできないようだが、Proposalは出されていてKEEPで議論されている。
String Templates
- Javaで現在は提案段階
- 文字列の中に変数を埋め込んで展開可能な機能
- KotlinでいうところのString Interpolation
Gradle Kotlin DSL と Gradle Plugin 開発
- ktsにrenameしてsyntaxエラーは出るので地道にエラーを解消していく
- ビルドがどうしても通らない時は --no-chacedをつける
- Groovy DSLのwrapperではなく、直接Gradle APIを叩いている
- 拡張関数で自然にみせているがDSLの中身の処理は実直(いかつい)
- バージョン周りのややこしさありそう
- 受け入れテスト
- Gradle TestKit の GradleRunnerがベスト
::class.fixture() pattern — Kotlin 拡張関数を生かした、Test Fixture 管理の紹介
- Test Fixtureは簡単にかけるが「何をテストしているか」が分かりにくい
- テストコードはDRYではなく、DAMPを目指すべき
うわっ…もしかして私のコード、遅すぎ…?
- 計測をする
- kotlin-benchmark, 0.4.6では android, iOS, WatchOSではplatform上で実行できるようになってない
- KMM向けにSourceSetsを作成したりする
- JMH (Java Microbenchmark Harness)
- Benchmark Code の構成はJUnitのコードに似ている(Androidエンジニアとしては嬉しい)
もう迷わないCoroutines〜suspend funとChannelとFlow〜
- CoroutinesやFlowなどの基本情報など、再入門にいい感じの内容
- flowは3種類 Flow / SharedFlow / StateFlow
- Flow: cold
- SharedFlow / StateFlow : hot
- キャンセル
- coroutineScope.launch内で、currentCoroutineContext.cancel() で明示的にキャンセル可能
- close() でもキャンセル可能
- 使い分け
- callbackで値を1つだけ受け取りたい = suspendCancellableCoroutine
- 購読の値を継続的に受け取りたい = callbackFlow
- 通信処理の置き換え ( rxJava + Retrofit ) = リポジトリでFlowへ変換(asflow)
- ワンショットであればHotでなくていい
- リクエストと購読を分けたい
- SharedFlowでreplayCacheで配信
当日視聴はここまで、見れなかったセッションはアーカイブで見ます。