kotlin入門 (教程難點)

整理學習kotlin過程當中遇到的難點,記錄下來,而後再理解理解。(新手寫的博客,勿噴)java

習慣用法:json

擴展函數

fun String.spaceToCamelCase() { …… }

"Convert this to camelcase".spaceToCamelCase()

If not null 縮寫

val files = File("Test").listFiles()

println(files?.size)

If not null and else 縮寫

val files = File("Test").listFiles() println(files?.size)

If not null and else 縮寫

val files = File("Test").listFiles()

println(files?.size ?: "empty")

if null 執行一個語句

val data = ……
val email = data["email"] ?: throw IllegalStateException("Email is missing!")

if not null 執行代碼

val data = ……

data?.let {
    …… // 代碼會執行到此處, 假如data不爲null
}

返回類型爲 Unit 的方法的 Builder 風格用法

fun arrayOfMinusOnes(size: Int): IntArray {
    return IntArray(size).apply { fill(-1) }
}

返回類型爲 Unit 的方法的 Builder 風格用法

fun arrayOfMinusOnes(size: Int): IntArray { return IntArray(size).apply { fill(-1) } } 

單表達式函數

fun theAnswer() = 42 

等價於app

fun theAnswer(): Int { return 42 } 

單表達式函數與其它慣用法一塊兒使用能簡化代碼,例如和 when 表達式一塊兒使用:函數

fun transform(color: String): Int = when (color) { "Red" -> 0 "Green" -> 1 "Blue" -> 2 else -> throw IllegalArgumentException("Invalid color param value") } 

對一個對象實例調用多個方法 (with

class Turtle {
    fun penDown()
    fun penUp()
    fun turn(degrees: Double)
    fun forward(pixels: Double)
}

val myTurtle = Turtle()
with(myTurtle) { // 畫一個 100 像素的正方形
    penDown()
    for(i in 1..4) {
        forward(100.0)
        turn(90.0)
    }
    penUp()
}

Java 7 的 try with resources

val stream = Files.newInputStream(Paths.get("/some/file.txt"))
stream.buffered().reader().use { reader ->
    println(reader.readText())
}

對於須要泛型信息的泛型函數的適宜形式

//  public final class Gson {
//     ……
//     public <T> T fromJson(JsonElement json, Class<T> classOfT) throws JsonSyntaxException {
//     ……

inline fun <reified T: Any> Gson.fromJson(json): T = this.fromJson(json, T::class.java)

使用可空布爾

val b: Boolean? = ……
if (b == true) {
    ……
} else {
    // `b` 是 false 或者 null
}

 

kotlin是門好語言,是門有前途的語言。學習

相關文章
相關標籤/搜索