kotlin基础四

本文探讨了Kotlin中的lambda表达式、内联优化、函数引用、闭包、高级函数以及与Java的对比,强调了Kotlin如何通过null安全特性减少空指针异常,如使用let和非空断言操作符进行安全调用。
摘要由CSDN通过智能技术生成

函数内联

lambda可以让你更灵活地编写应用,但是,灵活也是要付出代价的。

在JVM上你定义的lambda会以对象实例的形式存在,JVM会为所有同lambda打交道

的变量分配内存,这就产生了内存开销。更糟的是,lambda的内存开销会带来严重的性

能问题。幸运的是,kotlin有一种优化机制叫内联,有了内联,VM就不需要使用lambd

a对象实例了,因而避免了变量内存分配。哪里需要使用lambda,编译器就会将函数体

复制粘贴到哪里。

使用lambda的递归函数无法内联,因为会导致复制粘贴无限循环,编译会发出警告。

函数引用

要把函数作为参数传给其他函数使用,除了传lambda表达式, kotlin还提供了其他方法,传递函数引用,函数引用可以把一个具名函数转换成一个值参,使用lambda表达式的地方,都可以使用函数引用。

函数类型作为返回类型

函数类型也是有效的返回类型,也就是说可以定义一个能返回函数的函数。

闭包

在Kotlin中,匿名函数能修改并引用定义在自己的作用域之外的变量,匿名函数引用着定义自身的函数里的变量,Kotlin中的lambda就是闭包。

能接收函数或者返回函数的函数又叫做高级函数,高级函数广泛应用于函数式编程当中.

lambda与匿名内部类

为什么要在代码中使用函数类型?函数类型能让开发者少写模式化代码,写出更灵活

的代码。Java 8支持面向对象编程和lambda表达式,但不支持将函数作为参数传给另一个函数或变量,不过Java的替代方案是匿名内部类。

函数类型与隐式返回

匿名函数也有类型,匿名函数可以当作变量赋值给函数类型变量,就像其他变量一样匿名函数就可以在代码里传递了。变量有类型,变量可以等于函数,函数也会有类型。函数的类型,由传入的参数和返回值类型决定。和具名函数不一样,除了极少数情况外,匿名函数不需要return关键字来返回数据,匿名函数会隐式或自动返回函数体最后一行语句的结果。

null

在Java中我们司空见惯的空指针异常NullPointerException,带给了我们很多麻烦。Kotlin作为更强大的语言,势必会基于以往的语言设计经验对其进行改良。Kotlin更多地把运行时可能会出现的null问题,以编译时错误的方式,提前在编译期强迫我们重视起来,而不是等到运行时报错,防范于未然,提高了我们程序的健壮性。

null安全

Kotlin区分可空类型和非可空类型,所以,你要一个可空类型变量运行,而它又可能不存在,对于这种潜在危险,编译器时刻警惕着。为了应对这种风险,Kotlin不允许你在可空类型值上调用函数,除非你主动接手安全管理。

使用带let的安全调用

安全调用允许在可空类型上调用函数,但是如果还想做点额外的事,比如创建新值,或判断不为null就调用其他函数,怎么办?可以使用带let函数的安全调用操作符可以在任何类型上调用let函数,它的主要作用是让你在指定的作用域内定义一个或多个变量。

选项二:(使用非空断言操作符

!!.又称感叹号操作符,当变量值为null是,会抛出KotlinNullPointerException。


 

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值