Kotlin今日の発見 2018年8月3日

Kotlin今日の発見 2018年8月3日

android studioのドキュメントを眺めていた。
Kotlinのことが書かれていた。
また、今更ながら便利な構文を見つけた。

Elvis Operator

代入がnullになってしまうときの処理を書ける。

1
2
3
4
5
6
7
val hashMap = hashMapOf<String, String>(
    "A" to "Alpha",
    "B" to "Bravo",
    "C" to "Charlie")
val nameA = hashMap["A"] ?: "no name."
val nameD = hashMap["D"] ?: "no name."
println("nameA:[$nameA], nameD:[$nameD]")

今まで、if (nameA == null) … と書いてしまっていた。

処理分岐に用いることもできる。

1
2
3
4
fun myFun(hashMap: HashMap<String, String>) {
    val name = hashMap["A"] ?: return
    println("nameA:[$nameA]")
}

これも、ifで判定していた。早く知っていれば…

そもそも、hashMapがnullかもしれない場合

1
2
3
var map: MutableMap<String, String>? = null
val mapSize = map?.size ?: -1
println("mapSize:[$mapSize]")

?.と?:で、nullに対処できる。

複数の値を返却する関数

data classを利用することで、複数の値を返却する関数やメソッドを定義できる。

1
2
3
4
5
6
7
8
9
10
11
data class Result(val code: Int, val msg: String)
fun myFun2(i: Int): Result {
    if (i > 0) {
        return Result(0, "OK")
    }
    return Result(9, "NG")
}
val (code1, msg1) = myFun2(1)
println("code:$code1, msg:$msg1")
val (code2, msg2) = myFun2(-1)
println("code:$code2, msg:$msg2")

戻り値はResultクラスのインスタンスのまま、受け取っても良い気もする。戻り値の使い方次第だけれど。
javaだと、クラスを作るのが面倒なので、複数の値が簡単に返却できればと思うけど、Kotlinなら簡単にdata class定義できるし。

まとめ

やっぱりKotlinは便利。

同じタグの記事
同じカテゴリの記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA