2016/12/12の30分 Kotlinメモ🍜
書いてるコードは雑にここにあります。
Calling Java code from Kotlin
Getters and Setters
JavaのクラスのメソッドでsetXXXとgetXXXがあるやつは、Kotlin側でプロパティみたいに扱えるよ!って話かな??
例としか以下みたいなコードが書いてある。なるほど、便利。
setterとかgetterしかないものはダメっぽい。
import java.util.Calendar fun calendarDemo() { val calendar = Calendar.getInstance() if (calendar.firstDayOfWeek == Calendar.SUNDAY) { // call getFirstDayOfWeek() calendar.firstDayOfWeek = Calendar.MONDAY // call setFirstDayOfWeek() } }
Escaping for Java identifiers that are keywords in Kotlin
Kotlinの予約語とかをもしJavaのメソッドとかで使ってる場合、``で囲んでねって話。
public class JavaJava { public void is() { System.out.println(JavaJava.class.getName()); } } JavaJava().`is`()
Null Safety
みんな大好きnull
の話。
これよくまとまってるので、ちゃんと読むと良さそう。
Nullable types and Non-Null Types
なるほど。
var hunhunhunhun: String = "abc" hunhunhunhun = null // compilation error println(hunhunhunhun.length) var hunhunhunhun2: String? = "abc" hunhunhunhun2 = null // OK println(hunhunhunhun2.length) // compilation error
Safe Calls
?.
ね。
続けても書ける。その場合、どこかでnullになればnullが返る。
var hunhunhunhun2: String? = "abc" hunhunhunhun2 = null // OK val len: Int? = hunhunhunhun2?.length println(len) val len2: Int? = hunhunhunhun2?.length?.toInt() println(len2)
let
と組み合わせて以下のようなこともできると。
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/let.html
val listWithNulls: List<String?> = listOf("A", null) for (item in listWithNulls) { item?.let { println(it) } // prints A and ignores null }
Elvis Operator
?:
ね。三項演算子みたいだけど違うよ、全然違うよ。
var hunhunhunhun2: String? = "abc" hunhunhunhun2 = null // OK // こうも書けるけどー println(if (hunhunhunhun2 != null) hunhunhunhun2.length else -1) // Elvis Operator使ってこう書いた方がいい println(hunhunhunhun2?.length ?: -1)
例外も投げられる。なので引数チェックとかに便利だよーって書いてあった気がする。
println(hunhunhunhun2?.length ?: throw Exception("hunhunhunhun2 is null."))
The !! Operator
!!
で無視してアクセスできると。これはーまあ使わないかなーできるだけ。
var hunhunhunhun2: String? = "abc" hunhunhunhun2 = null // OK println(hunhunhunhun2!!.length)
Collections of Nullable Type
こんなのもあるよー的な。
val nullableList: List<Int?> = listOf(1, 2, null, 4) val intList: List<Int> = nullableList.filterNotNull() println(intList) // [1,2,4]
実装的には単純だよね。
/** * Appends all elements that are not `null` to the given [destination]. */ public fun <C : MutableCollection<in T>, T : Any> Iterable<T?>.filterNotNullTo(destination: C): C { for (element in this) if (element != null) destination.add(element) return destination }
まとめ
Null Safetyがよくまとまってて嬉しい😊