2016/12/23の30分 Kotlinメモ😏

2016/12/23の30分 Kotlinメモ

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

github.com

Kotlinスタートブック -新しいAndroidプログラミング を引き続き読んでる。

Kotlinスタートブック -新しいAndroidプログラミング

Kotlinスタートブック -新しいAndroidプログラミング

Extension Properties

kotlinlang.org

プロパティも拡張できるのか。便利だなーまったく!!

// 拡張プロパティ
// バッキングフィールドは持てない
val String.countWords: Int
    get() = split("""\s+""".toRegex()).size

println("Kotlin Kotlin Kotlin!!".countWords) // 3

継承

kotlinlang.org

継承していいものにopenつけろよ!ってところ以外はだいたいJavaと同じかなー。

プロパティもoverrideできるのか!?ってことには驚いた!できるのか、そうか。

open class Person(val name: String) {

    open var age: Int = 0

    open fun introduce() {
        println("I am $name2.")
    }
}

class Student(name: String, val id: Long) : Person(name) {

    override var age: Int = 0
        get() = field
        set(value) {
            field = value * 2
        }

    override fun introduce() {
        println("I am $name(id=$id).")
    }
}

// super classの型にsub classの型は入る
val p2: Person = Student("kotlin", 1L)
p2.introduce()

Abstract Classes

これはほぼJavaと同じかなー

そしてプロパティをabstractにできるのか!?できるのか、そうか。

abstract class Greeter(val target: String) {

    abstract var code: String

    abstract val age: Int

    abstract fun sayHello()
}

class EnglishGreeter(target: String, override val age: Int) : Greeter(target) {
    override var code: String = ""
        get() = "en"
        set(value) {
            field = value
        }

    override fun sayHello() {
        println("Hello $target!")
    }
}

class JapaneseGreeter(target: String, override val age: Int) : Greeter(target) {
    override var code: String = ""
        get() = "ja"
        set(value) {
            field = value
        }

    override fun sayHello() {
        println("こんにちは、$target!")
    }
}

まとめ

冬休みもKotlinガンバルぞい!