今天就跟大家聊聊有关芬兰湾的科特林中的高阶函数有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
<强>前言强>
在芬兰湾的科特林中,高阶函数是指将一个函数作为另一个函数的参数或者返回值。如果用f (x), g (x)用来表示两个函数,那么高阶函数可以表示为f (g (x)) .Kotlin为开发者提供了丰富的高阶函数,比如Standard.kt中的让,应用等,_Collectioins。kt中的forEach等。为了能够自如的使用这些高阶函数,我们有必要去了解这些高阶函数的使用方法。
<强>函数类型强>
在介绍常见高阶函数的使用之前,有必要先了解函数类型,这对我们理解高阶函数很有帮助.Kotlin使用类似(Int)→字符串的一系列函数类型来处理函数的声明,这些类型具有与函数签名相对应的特殊表示法,即它们的参数和返回值:
- <李>
所有函数类型都有一个圆括号括起来的参数类型列表以及一个返回类型:(A, B)→C表示接受类型分别为A与B两个参数并返回一个C类型值的函数类型。参数类型列表可以为空,如()→,返回值为空,如(A, B)→李单位;
> <李>函数类型可以有一个额外的接收者类型,它在表示法中的点之前指定,如类型a (B)→C表示可以在一个的接收者对象上,调用一个以B类型作为参数,并返回一个C类型值的函数。
李> <李>还有一种比较特殊的函数类型,挂起函数,它的表示法中有一个暂停修饰符,例如暂停()→单位或者暂停a (B)→李C。
> <强>常用高阶函数强>
芬兰湾的科特林提供了很多高阶函数,这里根据这些高阶函数所在文件的位置,分别进行介绍,先来看一下常用的高阶函数,这些高阶函数在Standard.kt文件中。
<强> 1。TODO 强>
先来看一下TODO的源码:
/* * ,* Always throws [NotImplementedError], stating that operation is not 实施。 ,*/@kotlin.internal.InlineOnly public inline  fun 待办事项():,Nothing =, throw NotImplementedError ()/* * ,* Always throws [NotImplementedError], stating that operation is not 实施。 ,* ,* @param reason  a string explaining why 从而implementation is 失踪。 ,*/@kotlin.internal.InlineOnly public inline  fun 待办事项(原因:字符串):,Nothing =, throw NotImplementedError (“An  operation is not 实现:,reason"美元;)
TODO函数有两个重载函数,都会抛出一个NotImplementedError的异常。在Java中,有时会为了保持业务逻辑的连贯性,对未实现的逻辑添加TODO标识,这些标识不进行处理,也不会导致程序的异常,但是在芬兰湾的科特林中使用TODO时,就需要针对这些标识进行处理,否则当代码逻辑运行到这些标识处时,就会出现程序的崩溃。
<强> 2.运行强>
先给跑出函数的源码:
/* * ,* Calls 从而specified function (块),以及returns its 结果。 ,*/@kotlin.internal.InlineOnly public inline  fun & lt; R>,运行(布洛克:,(),→,R):, R { ,contract { ,callsInPlace(块,InvocationKind.EXACTLY_ONCE) ,} ,return 块() }/* * ,* Calls 从而specified function (块),with “这”,value as its receiver 以及returns its 结果。 ,*/@kotlin.internal.InlineOnly public inline  fun & lt; T, R>, T.run(块:T (),→, R):, R { ,contract { ,callsInPlace(块,InvocationKind.EXACTLY_ONCE) ,} ,return 块() }
这两个运行函数都接收一个λ表达式,执行传入的λ表达式,并且返回λ表达式的执行结果。区别是T.run()是作为泛型T的一个扩展函数,所以在传入的λ表达式中可以使用这个关键字来访问这个泛型T中的成员变量和成员方法。
比如,对一个EditText控件,进行一些设置时:
//email 是一个EditText控件 {email.run this.setText才能(“请输入邮箱地址“) setTextColor才能(context.getColor (R.color.abc_btn_colored_text_material)) }
<强> 3。与强>
先看一下与函数的源码:
/* * ,* Calls 从而specified function (块),with 从而given (接收器),as its receiver 以及returns its 结果。 ,*/@kotlin.internal.InlineOnly public inline  fun & lt; T, R>,与(接收机:T,布洛克:,T (),→, R):, R { ,contract { ,callsInPlace(块,InvocationKind.EXACTLY_ONCE) ,} ,return receiver.block () }芬兰湾的科特林中的高阶函数有哪些