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

  • 相关阅读:
    codevs 1199 开车旅行 2012年NOIP全国联赛提高组
    poj 3349 Snowflake Snow Snowflakes
    poj 3264 Balanced Lineup
    求二进制数中1的个数
    20个正则表达式,减少千行代码
    推流脚本
    Navicat 管理工具下载地址,破解版
    emoji表情处理研究
    计算机网络学习
    tcp/ip 学习-通过视频学习
  • 原文地址:https://www.cnblogs.com/jaymo/p/6900548.html
Copyright © 2011-2022 走看看