Kotlin基础教程-高阶函数和lambda表达式
来源:互联网 发布:人工智能芯片龙头股ai 编辑:程序博客网 时间:2024/04/27 23:36
高阶函数与 lambda 表达式
何为高阶函数
函数参数为函数的,称为高阶函数。
高阶函数的定义
fun lock<T>(lock: Lock, body: () -> T ) : T { lock.lock() try { return body() } finally { lock.unlock() }}
lock
函数的第二个参数是一个函数,该函数无参,返回T类型。
调用该函数
fun toBeSynchroized() = sharedResource.operation()val result = lock(lock, ::toBeSynchroized)val result = lock(lock, {sharedResource.operation() })
第一个调用传递的是一个标准定义的函数,第二个是一个字面函数(一会会介绍什么是字面函数)。
针对第二个调用,我们正常能看到的方式应该是:
lock (lock) { sharedResource.operation()}
因为Kotlin
有一个约定,就是如果第二个参数是函数,可以放到括号外面,所以格式从lock(lock,{function})
变成了lock(lock){function}
举第二个栗子
map函数
fun <T, R> List<T>.map(transform: (T) -> R):List<R> { val result = arrayListOf<R>() for (item in this) result.add(transform(item)) return result}
正常调用形式应该是map(funtion)
,但是由于最后一个参数是参数,所以一般见到的形式是map{funtion}
:
val doubled = ints.map {it -> it * 2}
其中{it->it*2}
是一个字面函数,关于字面函数也有一个神话(约定)就是如果参数只有一个(这里只有it),该参数也可以省略。
ints.map {it * 2}
字面函数
无声明函数,匿名函数。这两个词能概括么?字面函数就是一种函数表达式。
函数类型
fun max<T>(collection: Collection<out T>, less: (T, T) -> Boolean): T? { var max: T? = null for (it in collection) if (max == null || less(max!!, it)) max = it return max}
max
函数的第二个参数是一个函数,参数名less
。(T,T)->Boolean
就是该函数的类型,表示该函数有两个参数,返回的是布尔值。
闭包
何为闭包
var sum = 0ins filter {it > 0} forEach { sum += it}print(sum)
阅读全文
0 0
- Kotlin基础教程-高阶函数和lambda表达式
- Kotlin高阶函数和Lambda表达式
- Kotlin语法(十八)-高阶函数和Lambda表达式
- Kotlin学习之-6.2 高阶函数和lambda表达式
- Kotlin 第十五章:高阶函数和 Lambda 表达式
- Kotlin 高阶函数 与 Lambda 表达式
- Kotlin Reference (十五) 函数和lambda表达式:普通函数和高阶函数
- Kotlin编程之高阶函数,Lambda表达式,匿名函数
- Kotlin函数与Lambdas(二)--- 高阶函数和 lambda 表达式
- Kotlin高阶函数及Lambda表达式解析
- 玩转Kotlin--彻底弄懂Lambda和高阶函数
- Kotlin中的函数和Lambda表达式
- Kotlin-22.Lambda表达式和函数
- Kotlin学习(十二): 函数、高级函数和Lambda表达式
- 学习kotlin第11天_函数和lambda表达式
- Kotlin——程序的灵魂组成之Lambda表达式、匿名函数、高阶函数的基本语法(二)
- Kotlin基础教程-对象表达式和声明
- Kotlin Reference (十六) 函数和lambda表达式:内联函数、内联属性
- php面试题-1
- 伪数据科学家 VS 真数据科学家
- 大数据工程师定义
- android:layout_above="@+id/XXX"与android:layout_below="@+id/XXX"写法的区别
- 2. JavaScript深入之词法作用域和动态作用域
- Kotlin基础教程-高阶函数和lambda表达式
- react-native 三方插件
- jquery两个参数的详解
- 【Java8源码分析】NIO包-Buffer类:ByteBuffer与HeapByteBuffer(一)
- Java基础入门(二)语法
- 如何实现点击按钮实现QQ在线联系客服聊天
- PHP生成条形码
- iOS传感器:实现一个随屏幕旋转的图片
- 类模版