Kotlin再発見

Kotlin今日の発見

Kotlinは、javaの上にかぶせて動かすもの。
したがって、Kotlinの構文がよくわからない時は、
Javaの構文でほとんど書けてしまう。
しかし、それに甘んじてしまうと、せっかくのKotlinを活かしきることが出来ない。
たまには、マニュアルに戻ってKotlinを知ることにする。

文字列の比較に==が利用できる

今更知ってしまった。


val s1 = "AAA"
val s2 = "BBB"
val s3 = "AAA"
println("s1==s2 ? ${s1 == s2}")
println("s2==s3 ? ${s2 == s3}")
println("s3==s1 ? ${s3 == s1}")

注意:上記の例は、定数の比較なのでjavaでも正しく動くことがある。

Listへの要素追加は+=で行える。

もちろんjavaのように.add()でも追加できるが、やはりKotlin流に。


val l1 = mutableListOf()
l1.add("Zero")
l1.add("One")
l1 += "Two"
l1 += "Three"
println("l1[$l1]")

なんか、スッキリする。

Listから値を取得するときは配列の様に括弧で取得できる。

もちろんjavaのように.get()でも取得できるが、やはりKotlin流に。


val l2 = listOf("Zero", "One", "Two")
println("l2[1]:${l2[1]} l2.get(2):${l2.get(2)}")

こっちもスッキリ。

Mapへ値を追加するとも+=で行える。

もちろんJavaのようにput()でも行えるが、Kotlin流に。


val m1 = mutableMapOf()
m1.put("A", "あ")
m1.put("I", "い")
m1 += "U" to "う"
m1 += "E" to "え"
println("m1:$m1")

素晴らしい。

Mapから値を取得しようとして、キーが存在したらそれを取得し、存在しなかったら、新たに値を作成し、指定したキーで値を追加するgetOrPutというメソッドがある。


val m2 = mutableMapOf("A" to "あ", "U" to "う")
val a = m2.getOrPut("A", {"ああ"})
print("a:$a")
val i = m2.getOrPut("I", {"いい"})
print("i:$i")
print("m2:$m2")

これは便利。入力データの重複を加味しながら処理をすることはよくあるので、このメソッドを使えば繰り返しの処理がかなり綺麗に書ける。

Mapから値を取得しようとして、キーが存在したらそれを取得し、存在しなかったらデフォルト値を取得するgetOrElseというメソッドがある。


val m3 = mutableMapOf("A" to "あ", "U" to "う")
val a = m3.getOrElse("A", {"ああ"})
print("a:$a")
val i = m3.getOrElse("I", {"いい"})
print("i:$i")

これも使い道はあると思う。getOrPut()ほどの感動はないが。

文字列中に変数を展開するとき、toString()を明示的に書くことは薦められない。


val l4 = listOf("あ", "い", "う")
println("リスト:$l4")
println("リスト:${l4.toString()}")

どちらも同じように動いてくれるが、toString()を呼ぶ必要はない。
toString()も明示的で嫌いじゃないけど。

まとめ

やはり、たまには振り返らなくてはならない。
Kotlin素晴らしい。
でも、一通りわかった気がしてきてしまったので、
次はrubyに手を出したい。

Jythonに変わるJavaモジュールを使える言語として選択したKotlinだったが、
やはりコンパイルは面倒。コンパイル時間も微妙にかかるし。
コンパイルしてしまえば、Jythonの10倍くらい速く動く気がするけど。

ツールを作る上では、気軽にソースを変更したい。
なので、JRubyを。
JythonのPython2系の文字コード関連で悩まされたので、
JRubyにその辺の問題がないのであれば、早く使ってみたい。

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

コメント

コメントを残す

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

CAPTCHA