[書評]Kotlin Cookbook 1章~5章まで
の続編
以下、後半
・今回の内容
6. Sequences
7. Scope Functions
8. Kotlin Delegates
9. Testing
10. Input/Output
11. Miscellaneous
12. The Spring Framework
13. Coroutines and Structured Concurrency
・ループで時間がかかる処理
クソコード
全部のコードをmapして
全部のコードをfilterして
firstを取る
(100 until 2_000_000).map { println(it*2); it * 2 } .filter{ println(it);it % 3 == 0} .first()
クソコード2
多少マシになったが
全部のコードをmapして
firstを取る
(100 until 2_000_000).map { println(it*2); it * 2 } .first{ println(it);it % 3 == 0}
asSequenceにすると
100が全部処理されてから
101を全部処理する
(100 until 2_000_000).asSequence() .map { println(it*2); it * 2 } .filter{ println(it);it % 3 == 0} .first()
・Delegate
observableはすべて更新
var watched: Int by Delegates.observable(1) { prop, old, new -> println("$prop, $old, $new") }
vetoableは該当するときだけ更新
var watched: Int by Delegates.vetoable(1) { prop, old, new -> println("$prop, $old, $new") new >=0 } println(watched) 1 watched = -1 var Line_6.watched: kotlin.Int, 1, -1 println(watched) 1
・MapをDelegateにする
data class Project(val map: Map<String, Any?>) { val name: String by map } Project(mapOf("name" to "masterka")) res15: Line_14.Project = Project(map={name=masterka})
・arrayContainingInAnyOrder
順番を無視して比較する
Hamcrestというユニットテストの関数
・テスト用のデータ作成方法
デフォルトの値を入れるよりもFactory method作った方が良い
テストでしか使わないからね
以下が一例
data class Mock(val name:String) fun makeMock(name:String = "masterka") = Mock(name)
・JUnit5のParameterizedTest
csv形式のParameterizedTestもある
@ParameterizedTest @CsvSource({ "1, 1", "2, 2", "3, 3", "4, 4" }) fun a(x:Int, y:Int)
・Kotlinでファイルの読み書き
readText
writeText
がある
・Kotlinのバージョン確認方法
println(KotlinVersion.CURRENT) 1.3.71
・TODO
KotlinはTodoがメソッドとして定義されてるので
呼ばれるとException吐いてクラッシュする
TODO("aaaa") kotlin.NotImplementedError: An operation is not implemented: aaaa
・Springboot
springだと全部openじゃないといけないとか制約がある
この辺は、springintializr使えば自動でいい感じにしてくれるので楽
一緒に読み込んでるライブラリはこんな感じ
kotlin("jvm") version "1.3.71" kotlin("plugin.spring") version "1.3.71" //Kotlin Spring plug-in freeCompilerArgs = listOf("-Xjsr305=strict") //jsr305対応
・JPA
以下をつけるとKotlinを使う上で困る問題が解消される
kotlin("plugin.jpa") version "1.3.71"
・Coroutine
GlobalScopeじゃなくてCoroutineScope使えよ
本書はとてもためになりました
Kotlinを使ってる人には、次なる一歩を導く一冊だと思います