2016/12/01の30分Kotlinメモ😎

2016/12/01の30分Kotlinメモ😎

書いてるコードは雑にここにあります。

github.com

Collections

mutableとimmutableのcollectionsが分かれてる。

kotlinlang.org

List

要素は配列みたいに[index]とかでアクセスできる。

set(index)で書いたら、IDE[index]の方で書いたほうがいいよーって書き直されたので、そっちの記法で書くのがいいのかなーと勉強になった。

確かにやってることは同じだし、一々setとかメソッド名書くのだるいか。

val ml: MutableList<String> = mutableListOf("a", "b")

ml[0] = "c" // ml.set(0, "c")
println(ml[0]) // c

+=とか-=とかで要素を追加したり、削除したりできる。

便利ー。operator overrideやっぱりいいなー。

ml += "d" // plusAssign
println(ml) // [c, b, d]

ml -= "d" // minusAssign
println(ml) // [c, b]

Map

Pairにして渡すのねー

List同様で[key]で値にアクセスできるので便利だ。

val map2 = mutableMapOf("a" to 1, "b" to 2) // value to value でPairの生成
println(map2)
println(map2["a"])

List同様で+=で要素追加できる。

map2 += "c" to 3
println(map2) // {a=1, b=2, c=3}

println(("b" to 2 to 2 to 1)) // (((b, 2), 2), 1)
println(("b" to 2 to 2 to 1).javaClass) // class kotlin.Pair

Range

Javaにはないrangeね。これは便利だよねー。

kotlinlang.org

IntRangeCharRangeLongRangeがあるっぽい。自分でも独自の型でRange作れるのかなー?

// range
println(5 in 1..10)
val range: IntRange = 1..10
val cRange = 'a'..'z'
val lRange = 10L..100L
println(5 in range)
println(5 !in range) // !in = 範囲外

toListとかでRangeからListにできる。なるほど。

逆順ならdownTo、一定間隔にしたいならstep

println((1..5).toList())
println((5 downTo 1).toList()) // [5, 4, 3, 2, 1]
println((1..5 step 2).toList())
println((100 downTo 0 step 25).toList()) // [100, 75, 50, 25, 0]

if

基本はJavaと同じ。

最後に書いた値が戻り値になる。returnとかいらないのは楽。

val a = 1
val b = 2

val c = if (a > b) {
    println(a)
    a
} else {
    println(b)
    b
}
println(c) // 2

こんな感じでも書ける。三項演算子はないのよね。

val d = if (true) "true" else "false"
println(d) // true

こんな感じでも書ける。便利そう。

val aaaa = 10
var e =
        if (aaaa == 10) "10"
        else if (aaaa > 2) "2"
        else "0"
println(e) // 10

when

こいつがとにかく便利。

kotlinlang.org

switchみたいだけど、メソッドの戻り値を指定できる。定数じゃなくていいのか。Goみたいだ。

when (10) {
    hogehoge() -> println("hogehoge")
    1 -> println("a")
    2 -> println("a")
    3 -> println("b")
    else -> println("else")
}

RangeやListも指定できる。List内に含まれていたら...って感じになる。最高。

when (1) {
    in list -> println("list")
    0, 1 -> println("0 or 1")
    in 2..10 -> println("range 2..10")
}

値を返したり、ifみたいな感じでも書けるのですごい!

// 値が返せる
val aa = when (1) {
    1 -> 1 * 3
    else -> 0
}
println(aa) // 3

// ifみたいに書ける
when {
    "s".isEmpty() -> println("empty")
    else -> println("else")
}

val aaaa = 10

val e = when {
    (aaaa == 10) -> "10"
    (aaaa > 2) -> "2"
    else -> "0"
}
println(e) // 10

まとめ

rangeとwhenがとにかくすごい