所谓技术总是不停更新迭代,我们能做的只有马不停蹄的去不断学习。
上节讲了gradle相比于maven的优点,相信小伙伴们也准备去学了吧。在本节在来一个重磅,Kotlin的函数式编程。什么是kotlin???
Kotlin(科特林)是一个用于现代多平台应用的静态编程语言,由JetBrains公司开发。Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。除此之外Kotlin还可以编译成二进制代码直接运行在机器上(例如嵌入式设备或iOS),在Java中,是以OOP面向对象编程,Kotlin主要是面向函数式编程,函数可以赋值给变量,也可以作为方法参数,也可以作为函数的返回值,下面一一举例
1.函数赋值给变量
Kotlin既然可以将函数赋值给变量,那么函数作为函数返回值,作为参数那就理所应当。多个变量可以同时引用一个函数,可以不使用函数名调用函数了,函数名就可以忽略,完全靠变量来调用函数,那么就可以定义没有函数名的函数,也就是匿名函数,当然也就是Lambda表达式,下面例子中,::可以取出函数的地址,这个例子和函数指针非常类似
//申明一个函数
fun add(num1: Int, num2: Int)= num1 + num2
//调用
var mAdd = ::add
mAdd(1,2)
2.函数作为函数的参数
//申明函数
fun add2(num1: Int, f: (isTrue: Int) -> Boolean) {
if (f(num1)) {
println("1111111")
} else {
println("2222222")
}
}
fun isEvent(num: Int) = num % 2 == 0
//调用
add2(22,::isEvent)
3.函数作为返回值
函数作为返回值是函数式编程中非常重要的,函数可以作为返回值,那么函数内可以定义函数,并且函数可以返回函数内定义的函数。如果一个函数只能返回外部函数,函数内不可以定义函数,那就显得低级了,很多功能也就不能实现了,比如闭包。函数内定义函数,定义内函数作用和功能都很明显,函数可以封装得更好,可以返回内部函数,可以访问函数内的局部变量,因为内函数可以访问外函数的变量,而内函数又可以被作为返回值,这部分就是重要的闭包功能,和变量的作用域相关,下面来举几个例子
a.返回外部函数
fun getVoid(num: Int):(x:Int) -> Boolean{
return if (num==0) ::isEvent else ::isEvent2
}
fun isEvent(num: Int) = num % 2 == 0
fun isEvent2(num: Int) = num % 3 == 0
//调用
val isEvent = getVoid(0)
val isEvent2 = getVoid(1)
isEvent(1)
isEvent2(2)
b.返回内部函数
fun getVoid(): () -> Unit {
return {
println("我是匿名函数函数体")
}
}
上边例子是使用了匿名函数,所以没有了方法名和参数,当然也可以这么写
fun getVoid(): () -> Unit {
val voids = fun() {
println("我是函数体")
}
return voids
}
也可以不使用匿名函数
fun getVoid(): () -> Unit {
fun inVoid(){
println("我是函数体")
}
return ::inVoid
}
总结:kotlin的高阶语法糖很吸引人,代码很简洁,相对于java来说,能节省不少代码量,下一篇我们来讲一下Kotlin的扩展函数,以及java常用的接口回调。