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]
長くなるので続くよ