kako.dev

開発、自作アプリのこと

Kotlin Fest 2022 参加まとめ

今年もKotlin Fest 2022に参加しました。

www.kotlinfest.dev

今回はオンラインでの開催、物理的な制約がないためか参加者が740以上もいて大きなコミュニティであることを再確認しました。

ノベルティ

毎回KotlinFestのノベルティは可愛く実用性も高いので今年も楽しみでした。トートバックめっちゃ愛用してます。

KotlinFest2022ノベルティ
KotlinFest2022ノベルティ

見たセッション

しっかり理解する 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で配信

当日視聴はここまで、見れなかったセッションはアーカイブで見ます。