文章目录


高阶函数的定义为:是将函数用作参数或返回值的函数,我们常用的有如下几种:

forEach

foreach 遍历数组,列表等,之前写遍历都需要借助 for 或者 while 来完成,而有了 foreach ,则直接可以完成遍历。如下:

// java 
int []array = [1,2,3,4,5]
for(int i = 0, i<array.length,i++) {
println(array[i]);
}
// kotlin
let array = [1,2,3,4,5]
array.foreach {
println(it) // it为当前遍历的变量
}

it 为关键字,表示循环类的当前变量。

filter

filter 为过滤功能,可以按照规则返回一个新的集合。例如:

// java
int []array = [1,6,4,2,5]
for(int i = 0, i<array.length,i++) {
// 只打印大于3的
if (array[i] >= 3) {
println(array[i]);
}
}
// Kotlin
let array = [1,6,4,2,5]
array.filter{it > 3}.foreach{
println(it) // it为当前遍历的变量
}

上面 Kotlin 部分为现将大于3的部分进行过滤,然后将过滤的结果打印出来。语法上看起来简洁明了。

map

map 为映射值,当我们有一个数组需要将其中的数据做统一处理处理时,就会方便很多,如下:

// 将数组中的数据都乘以2
// Kotlin
let array = [1,6,4,2,5]
let newArray = array.map{it * 2}
// newArray = [2,12,8,4,10]

当然如果需求比较复杂,可以通过上面几个进行组合处理

函数参数

顾名思义,把一个函数作为一个参数传递给一个函数。传递的函数参数在函数体中进行执行,看下示例代码:

//Kotlin
// 当enable 为true才执行 method2 并返回值,否则不执行,返回0
fun method1(enable: Bool, method2: ()-> Int): Int {
if(enable) {
return method2()
}
return 0
}
// method2 为无参函数,返回值为Int
//调用方式1
method1(true, {
println("我执行了,并返回2")
return 2
})
//调用方式2
fun myMethod(): Int {
print(我执行了,并返回2)
return 2
}
method1(true, ::myMethod) //:: 标识传递的是一个方法

提醒: 在 Kotlin 中有一个约定,如果函数的最后一个参数是一个函数,并且你传递一个 Lambda 表达式作为相应的参数,这样就可以将参数函数内方法写在圆括号外,并用花括号括起来。如下:

method1(true) {
println("我执行了,并返回2")
return 2
}

typealias

类型别名,也就是说,可以对某个类型定义一个别名,以后可使用别名来表示之前的定义,就像小时候大家都有个小名,邻居叫你小名,也知道是在叫你。

比较常用在经常重复写一长串内容时,可以使用typealiase来定义一个短小简单易理解的名称来替换它。例如:

typealiase threadName = Thread.currentThread().name // threadName 为当前线程名
// 使用
println("current thread name = ${threadName}")

这样就可以比整体代码看起来就比较简洁了。当然还可以指定方法,函数等等。