高阶函数
什么样的函数才是高阶函数呢?又怎么使用啊?直接贴上代码:
方式一
fun main(){
fun test(a:String,display:(String)->Unit){
display(a)
}
//使用
test("666"){
//第二个参数是lambda表达式,这个参数可以放后面
}
}
display:(String)->Unit 既是一个lambda表达式也是一个函数,这就是一个高价函数。这个高阶函数使用时,第二个参数是lambda表达式(即test("666"){}),这个参数可以放后面。
方式二
函数当参数传递
fun main(){
fun test1(a:()->Unit):Unit{ //函数当参数传递
//再定义一个函数
fun test2(){
a()
}
return test2() //test2()作为一个函数返回出去
}
fun hello(){
println("hello world")
}
//调用
test1(::hello)
}
a:()->Unit,函数当参数传递,在test1函数内还可以定义函数,也可以将一个函数作返回值返回出去。test1函数还有另一种写法。代码如下:
typealias FunType = ()->Unit
fun main(){
//另一写法
fun test3(a:FunType):Unit{ //函数当参数传递
//再定义一个函数
fun test2(){
a()
}
return test2() //test2()作为一个函数返回出去
}
}
Kotlin库中常用的高价函数
-
run{}/T.run{}
run是一个无参的函数且有一个返回值(返回值的类型是任何类型(泛型))
fun main(){ run { //执行一块独立代码块 } //T.run T.() T表示类型 T.()表示扩展函数 相当于给T扩展了一个函数 val str = "kotlin" str.run { //这里可以使用str里的属性 length } }
-
with(){}
with的作用跟run一样
fun main{ val str = "kotlin" with(str){} }
-
T.apply{}
返回自己本身,可以接多个apply,
str.apply { length //可以使用str的属性 } .apply { } .apply { }
-
T.also{}
T.also的{}里it就代表T
str.also{ it.length //it就是代表str }
-
T.let{}
得到的一系列结果 可以反转回来。
str.let{ it.reversed()//得到的一系列结果 可以反转回来 }
-
T.taskIf{}
做了一个条件过滤
val result = str.takeIf{ //判断这个str是不是ok开头的 如果是ok开头就返回str 反之返回null it.startsWith("ok") }
-
lazy{}
用到了一个声明处协变 lazy就是如果初始化了返回一个T,如果未初始化则创建一个T。lazy 只能修饰 val 不可变参数,等同于 java 的 final 。
lazy{ }
lazy函数很像java中的懒汉式,饿汉式单倒模式。
协程
后续再添加。。。。