data classのtoString()で特定のフィールドを隠蔽する
https://mustafaali.net/2018/01/14/Kotlin-data-classes-and-sensitive-information/
ラッパークラスにしてあげると良い。
class ProtectedProperty<T>(var value: T) { override fun toString() = "███████████" } data class Customer( val name: String, val password: ProtectedProperty<String> ) val customer = Customer("user", ProtectedProperty("123")) println(customer) // => Customer(name=user, password=███████████)
いつかどこかで使うケースが出てきそうなのでメモ
build.gradle.ktsに移行する! 変換編
以前記事にしたプロジェクトをbuild.gradleからkotlin-dslに移行します。プロジェクト構成などについてはそちらを参照ください。
Spring Boot 2.2.0のリリースに伴いコードを書き直しました (最終更新: 2019/11/14)
※ リンクの記事はspring-data-r2dbc などを入れていますが、これだとdependencyManagementを入れた場合バージョン違いで動かないので、一旦リアクティブなDBアクセスの部分 (adapters.persistence) は外しました。
.gradleファイルと.gradle.ktsファイルは共存できるので、一つずつ変換していくと楽です。
この記事とは別に、Tipsを別記事にまとめています。
Kotlin groupingByって便利だね 2
問題: 生徒オブジェクトのリストがあり、性別ごとの所持金額を集計する
data class Student( val name: String, val gender: Gender, val wallet: Int ) enum class Gender { MALE, FEMALE } val students = listOf( Student("foo", MALE, 1000), Student("bar", MALE, 100), Student("fizz", FEMALE, 200), Student("buzz", FEMALE, 300) )
解答
val map = students.groupingBy { it.gender }.fold(0) { price, student -> price + student.wallet } println(map) // -> {MALE=1100, FEMALE=500}
foldの使い方をよく忘れるのでメモ
Kotlin groupingByって便利だね
問題: 生徒オブジェクトのリストがあり、クラスごとの人数を集計する
data class Student( val classNumber: String, val name: String ) val students = listOf( Student("1-1", "foo"), Student("1-1", "bar"), Student("1-1", "fizz"), Student("1-2", "buzz"), Student("1-2", "fuga"), Student("1-3", "hoge") )
解答: groupingByを使う
val count = students.groupingBy { it.classNumber }.eachCount() println(count) // => {1-1=3, 1-2=2, 1-3=1}
年に2回くらい使いたくなるが、そのたびに忘れるのでメモ。
ktlintをGradleに導入する
Gradle projectにKotlinの静的解析ツールktlintを設定します。
コードには以前記事にしたプロジェクトを利用します。
Kotlin Coroutineのerror handlingを理解する
Kotlin Fest 2019 での Kotlinコルーチンを理解しよう 2019
が素晴らしかったので、忘れないうちに復習することにします。
サンプルプログラムは前回記事にしたクリーンアーキテクチャのコードを利用しています。