zoukankan      html  css  js  c++  java
  • 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是门好语言,是门有前途的语言。

  • 相关阅读:
    求数组中最小的k个数
    二叉树的四种遍历方法(C++)
    常见排序算法总结(C++)
    《剑指offer》第六十八题:树中两个结点的最低公共祖先
    《剑指offer》第六十七题:把字符串转换成整数
    《剑指offer》第六十六题:构建乘积数组
    《剑指offer》第六十五题:不用加减乘除做加法
    《剑指offer》第六十四题:求1+2+…+n
    《剑指offer》第六十三题:股票的最大利润
    《剑指offer》第六十二题:圆圈中最后剩下的数字
  • 原文地址:https://www.cnblogs.com/jaymo/p/6900548.html
Copyright © 2011-2022 走看看