面试题答案
一键面试高阶函数概念
在Go语言的函数式编程中,高阶函数是指满足以下条件之一的函数:
- 接受一个或多个函数作为参数。
- 返回一个函数。
高阶函数允许将函数作为一等公民进行操作,这使得代码更加灵活和可组合。
示例代码 - 切片过滤
package main
import (
"fmt"
)
// 高阶函数,接受一个切片和过滤函数,返回过滤后的切片
func filter(slice []int, f func(int) bool) []int {
var result []int
for _, v := range slice {
if f(v) {
result = append(result, v)
}
}
return result
}
func main() {
numbers := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
// 过滤出偶数
evenNumbers := filter(numbers, func(n int) bool {
return n%2 == 0
})
fmt.Println(evenNumbers)
}
示例代码 - 切片映射
package main
import (
"fmt"
)
// 高阶函数,接受一个切片和映射函数,返回映射后的切片
func mapSlice(slice []int, f func(int) int) []int {
var result []int
for _, v := range slice {
result = append(result, f(v))
}
return result
}
func main() {
numbers := []int{1, 2, 3, 4, 5}
// 将切片中的每个数平方
squaredNumbers := mapSlice(numbers, func(n int) int {
return n * n
})
fmt.Println(squaredNumbers)
}
相较于传统方式的优势
- 代码简洁:高阶函数抽象了通用的操作逻辑(如过滤、映射),使得具体业务代码更加简洁。例如在上述代码中,过滤和映射的逻辑被封装在高阶函数中,调用时只需关注具体的过滤或映射条件。
- 可复用性:高阶函数可以被复用在不同的切片操作场景中,只需要传入不同的处理函数即可。例如
filter
函数可以用于过滤不同类型切片中的元素,只要提供相应的过滤条件函数。 - 函数式风格:遵循函数式编程范式,减少了可变状态和副作用,使代码更易于理解和维护。每个函数专注于自己的功能,数据的处理流程更加清晰。