1. kotlin的表达式函数体

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    fun main() {
    println(add_express(1, 2))
    println(add_block(1, 2))
    println(add_lambda(1, 2))
    }

    /**
    * 代码块体,最完整的函数体
    */
    fun add_block(a: Int, b: Int): Int {
    return a + b
    }

    /**
    * 表达式体
    * 要求,他的函数体是由单个表达式构成的。
    * 那么她会自动判断返回类型。可以省略掉返回类型,同时需要省略掉花括号和return
    */
    fun add_express(a: Int, b: Int) = a + b

    var add_lambda = { a: Int, b: Int -> a+b}
    fun add(a:Int,b:Int):(Int,Int)->(Int)={ a: Int, b: Int -> a+b}
  2. kotlin高阶函数
    一个函数如果参数类型是函数或者返回值类型是函数,那么这就是一个高阶函数。
    函数类型其实就是将函数的 “参数类型” 和 “返回值类型” 抽象出来
    例如:

    1
    fun add():(Int,Int)->(Int)={ a: Int, b: Int -> a+b}

    这里表示他的返回类型为(Int,Int)->(Int)

  3. Lambda表达式
    同样的在lambda表达式中,他的函数体也只有一个表达式。
    他是定义匿名函数的简单形式

    1
    val sum = {x:Int,y:Int -> x+y}

    其中,参数声明放在->前面,函数体放在->后面
    还可以将可选标注先留下

    1
    val sum:(Int,Int)->Int = {x,y->x+y}

    在kotlin中,如果一个函数的最后一个参数是lambda表达式,那么可以直接将表达式写在括号外面。
    如果只有一个参数,那么直接省略小括号。

  4. 特殊符号

?表示 是否允许空值的存在
!!表示 如果对象为null,那么系统一定会报异常!
?:表示 对象A ?: 对象B 表达式,意思为,当对象 A值为 null 时,那么它就会返回后面的对象 B。
::表示 Kotlin 中 双冒号操作符 表示把一个方法当做一个参数,传递到另一个方法中进行使用,通俗的来讲就是引用一个方法。
->表示 一般用于函数类型的连接符号
=====的区别 在Kotlin中,=== 表示比较对象地址,== 表示比较两个值大小。