Kotlin高阶函数之Lambda简单说明

在说高阶函数之前,我觉得我们有必要先说下什么是函数编程。

函数式编程

函数式编程(functional programming)是一种编程典范,也就是面向函数的编程。在函数式编程中一切都是函数。

函数式编程核心概念

  • 函数是“一等公民”:是指函数与其他数据类型是一样的,处于平等的地位。函数可以作为其他函数的参数传入,也可以作为其他函数的返回值返回。
  • 使用表达式,不用语句:函数式编程关心的输入和输出,即:参数和返回值。在程序中使用表达式可以有返回值,而语句没有。
  • 高阶函数:函数式编程支持高阶函数,所谓高阶函数就是一个函数可以作为另外一个函数的参数或返回值。
  • 无副作用:是指函数执行过程会返回一个结果,不会修改外部变量,这就是“纯函数”,同样的输入参数一定会有同样的输出结果。

函数式编程的关键是高阶函数的支持。一个函数可以作为另一个函数的参数,或者返回值,那么这个函数就是“高阶函数”。
 

Lambda表达式

Lambda表达式是函数的一种类型。有用过Java经验的同学,相信对Lambda不会陌生。Kotlin的Lambda和Java的比较相似,但是会更加的灵活和方便。

Lambda表达式标准语法格式

{ 参数列表 -> 
      Lambda主体
}

Lambda表达式的参数列表与函数的参数列表形式类似,但是Lambda表达式参数列表前后没有小括号。箭头符号将参数列表与Lambda体分隔开,Lambda表达式不需要声明返回类型。Lambda表达式可以有返回值,如果没有return语句Lambda体的最后一个表达式就是Lambda表达式的返回值,如果有return语句返回值是return语句后面的表达式。

例如

/*
* Lambda 测试方法
*/
fun test(): (Int, Int) -> Int {
   return { a: Int, b: Int -> a + b }
}


fun main(args: Array<String>) {
    val test1 = test()
    println(test1(1, 2))
}

lambda 表达式简化写法

1、参数类型推导简化


Kotlin编译器可以根据上下文环境推导出参数类型和返回值类型

//标准写法
{ a:Int, b:Int -> a+b } 

//简化写法
{ a,b -> a+b } 

2、使用尾随Lambda表达式


Lambda表达式可以作为函数的参数传递,如果Lambda表达式很长,就会影响程序的可读性。如果一个函数的最后一个参数是Lambda表达式,那么这个Lambda表达式可以放在函数括号之后

//标准写法
funA(var1:Int, var2:Int, var3:Char, { a, b -> a + b }


//尾随简化写法
funA(var1:Int, var2:Int, var3:Char ) { a, b ->a + b }

3、省略参数声明


如果Lambda表达式的参数只有一个,并且能够根据上下文环境推导出它的数据类型,那么这个参数声明可以省略,在Lambda体中使用隐式参数it替代Lambda表达式的参数

//标准写法
funA("abc", { s -> s.reversed() })     

省略参数,使用隐式参数it
funA("abc", { it.reversed() })

注意 Lambda体中it隐式变量是由Kotlin编译器生成的,它的使用有两个前提:一是Lambda表达式只有一个参数,二是根据上下文能够推导出参数类型。、

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值