Kotlin Delegate propertyが素晴らしい。

最近Kotlin触れてませんでした。少しずつでもいじらないと全部忘れてしまいそうなので(ほとんど忘れてるけど…)、最近のバージョンアップで加わったDelegate propertyについてのブログを読んでました。試しにサンプルコードを書いてみたのですが、Delegate property素晴らしい!よく不満に思っていた部分が解消されていました。

例えば、Hogeクラスではメンバ変数のpiyoを使うのだけれど、piyoはString型。しかし、初期化のためにString?型にしてnullで初期化せざるをえなかった。本当はnullなんか入れたくないのに…。という場合。

ここにコードがあるじゃろ?

package demo

class Hoge {
  var piyo : String? = null // これが嫌い!
}

fun main(args : Array<String>) {
  val hoge = Hoge()
  hoge.piyo = "PIYOPIYO"
  println(hoge.piyo?.toLowerCase) // 型がString?なのでnullの可能性があるから?が必要
}

これをこうして…
こうじゃ!

package demo

class Hoge {
  var piyo : String by Delegates.notNull()
}

fun main(args : Array<String>) {
  val hoge = Hoge()
  hoge.piyo = "PIYOPIYO"
  println(hoge.piyo.toLowerCase) // 型がStringなのでnullの可能性がない!
}

これで不満が一つ解消された。

あと、Delegates.mapValが追加されてた。
これはjsonのデータをパースしてそのままインスタンスにする場合に使える。

package demo

class User(map : Map<String, Any?>) {
  val name: String by Delegates.mapVal(map)
  val age: Int     by Delegates.mapVal(map)
}

fun main(args : Array<String>) {
  val user = User(mapOf(
    "name" to "John Doe",
    "age" to 25
  ))
  println(user.name)
  println(user.age)
}

これもよさそう。あとはDelegates.lazy{}もあった。
これも使えそうだ。


タグ Kotlin | パーマリンク.

コメントを残す

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