美文网首页
Kotlin学习 之Lambda

Kotlin学习 之Lambda

作者: James999 | 来源:发表于2020-03-13 15:40 被阅读0次

    Ref: > https://www.kotlincn.net/docs/tutorials/getting-started.html

    Lambda 表达式语法

    Lambda 表达式的完整语法形式如下:

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

    lambda 表达式总是括在花括号中, 完整语法形式的参数声明放在花括号内,并有可选的类型标注, 函
    数体跟在⼀个 -> 符号之后。如果推断出的该 lambda 的返回类型不是 Unit ,那么该 lambda 主体中
    的最后⼀个(或可能是单个)表达式会视为返回值。
    如果我们把所有可选标注都留下,看起来如下:
    val sum = { x, y -> x + y }

    传递末尾的 lambda 表达式

    在 Kotlin 中有⼀个约定:如果函数的最后⼀个参数是函数,那么作为相应参数传⼊的 lambda 表达式可
    以放在圆括号之外:
    val product = items.fold(1) { acc, e -> acc * e }
    这种语法也称为拖尾 lambda 表达式。
    如果该 lambda 表达式是调⽤时唯⼀的参数,那么圆括号可以完全省略:
    run { println("...") }

    it:单个参数的隐式名称

    ⼀个 lambda 表达式只有⼀个参数是很常⻅的。
    如果编译器⾃⼰可以识别出签名,也可以不⽤声明唯⼀的参数并忽略 -> 。 该参数会隐式声明为 it :

    ints.filter { it > 0 } // 这个字⾯值是“(it: Int) -> Boolean”类型的
    

    从 lambda 表达式中返回⼀个值

    我们可以使⽤限定的返回语法从 lambda 显式返回⼀个值。 否则,将隐式返回最后⼀个表达式的值。
    因此,以下两个⽚段是等价的:

    ints.filter {
    val shouldFilter = it > 0
    shouldFilter
    }
    ints.filter {
    val shouldFilter = it > 0
    return@filter shouldFilter
    }
    

    这⼀约定连同在圆括号外传递 lambda 表达式⼀起⽀持 LINQ-⻛格 的代码:
    strings.filter { it.length == 5 }.sortedBy { it }.map { it.toUpperCase() }

    // 创建⼀个 Array<String> 初始化为 ["0", "1", "4", "9", "16"]
    val asc = Array(5) { i -> (i * i).toString() }

    相关文章

      网友评论

          本文标题:Kotlin学习 之Lambda

          本文链接:https://www.haomeiwen.com/subject/gwnqshtx.html