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

  • 相关阅读:
    树形DP
    区间DP
    洛谷P1462 通往奥格瑞玛的道路
    缓存--Redis
    Flack--SQLAlchemy
    Flask--WTForms
    Flask框架
    通过反射,获取linkedHashMap的最后一个键值对。对map按照值进行排序。
    Comparable和Comparator的使用
    构造函数,构造代码块,静态函数的执行顺序
  • 原文地址:https://www.cnblogs.com/jaymo/p/6900548.html
Copyright © 2020-2023  润新知