[書評]Kotlin Cookbook 1章~5章まで

Kotlin Cookbook: A Problem-Focused Approach
を読んだ

マスタカと言えばAndroidエンジニア
Androidと言えばKotlin
そんなわけで、本書を読んでみた!


・本書の内容
1問1答形式になってる
Kotlinをそこそこ書いていてる人が読むと
あるあるだわーとなったり
知らんかったわーとなったりする本

 

・今回の内容
1. Installing and Running Kotlin
2. Basic Kotlin
3. Object-Oriented Programming
4. Functional Programming
5. Collections

 

・Kotlin REPL
AndroidStudioやIntellijなら以下で起動できる
Tools->Kotlin>KotlinREPL

 

・gradleのdryrun
./gradlew build -m or –dry-run

 

・jsr305
-Xjsr305をつけることでnullableのJavaのannotationがkotlin側で効くようになる
https://spring.pleiades.io/spring-boot/docs/2.1.11.RELEASE/reference/html/boot-features-kotlin.html

 

・Default ArgumentsをJavaから呼ぶ
@JvmOverloadsをつけると自動でメソッドを作ってくれる

また、この場合は親のsuperメソッドを呼ぶときは同じ引数の数のものを呼ばずにsuper()を呼ぶのが注意点とのこと

 

・valとconstの違い
constはコンパイル時の定数
valは一回しか入れれない

 

・カスタムゲッター
bはカスタムゲッターできないけど、dはできる
primary constructorとtop-level memberだとこんな違いがある

class A(var b: Int) {
var d = 2
}

 

・Nothing
何も値を返却しないときに使う
1つ目がExceptionのとき

fun doNothing():Nothing = throw Exception("aaa")

2つ目がnullのとき、以下の時型はNothing?

val a = null

 

・コレクション関数
reduce:配列やリストの値に対して積み上げていく。初期値はラムダの対象にならないので注意。foldの方がわかりやすいかも
fold:初期値を明示的に指定して積み上げ

 

・tailrec
これで再起を書くと最適化されるとのこと

 

・mutableListをListにcastするとどうなるか

val list = mutableListOf(1, 2)

println(list)
[1, 2]

val readList = list

readList == list
res3: kotlin.Boolean = true

list.add(3)
res4: kotlin.Boolean = true

println(readList)
[1, 2, 3]

 

・コレクションからMapを作る

val list = mutableListOf(1, 2)
list.associate { it to it * 3 }

 

・リストの要素の取り出し

val list5 = mutableListOf(1, 2, 3, 4, 5)

val (a, b, c) = list5

print ("$a $b $c")
1 2 3

 

・リストから型に合うものだけ取り出す

import java.time.LocalDate

val listVary = mutableListOf(1, "a", LocalDate.now())

val intList = listVary.filterIsInstance<Int>()

println(intList)
[1]

 

長くなるので続くよ

関連記事:

Pocket