kotlin入门 (教程难点)

整理学习kotlin过程中遇到的难点,记录下来,然后再理解理解。(新手写的博客,勿喷)

习惯用法:

扩展函数

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

等价于

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是门好语言,是门有前途的语言。

posted on 2017-05-24 19:11  jaymo  阅读(892)  评论(0编辑  收藏  举报

导航