2016/12/01の30分Kotlinメモ😎
2016/12/01の30分Kotlinメモ😎
書いてるコードは雑にここにあります。
Collections
mutableとimmutableのcollectionsが分かれてる。
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ね。これは便利だよねー。
IntRange
、CharRange
、LongRange
があるっぽい。自分でも独自の型で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
こいつがとにかく便利。
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がとにかくすごい