Kotlin中常见扩展函数和顶层函数
为了编程的方便,kotlin中为我们提供了一些常用的扩展函数和顶层函数,掌握好这些函数可以大大的提高我们的编程效率
let函数
let函数扩展了所有的泛型对象,默认当前这个对象作为闭包的it参数,而返回值是闭包函数的最后一行,或者指定其return.
函数定义为:
|
|
apply函数
apply函数扩展了所有的泛型对象,在闭包范围内可以任意调用该对象的任意方法,并在最后返回该对象.
函数定义为:
|
|
而在Kotlin中,我们可以使用apply函数来简化这个事情:
|
|
特别需要注意的是apply函数中表示对象本身使用的是this
关键字而不是it
run函数
run函数的用法和apply函数基本相同,唯一的区别在于 apply函数返回的是对象本身,而run函数返回的是闭包的返回.
函数定义:
|
|
also函数
这个函数是kotlin1.1新增的, 起用法和apply函数也基本相同,也是返回对象本身,区别在于 在also函数内我们使用it
来指代对象本身而不是使用this
关键字.
函数定义:
|
|
with函数
with函数不是扩展函数,而是顶层函数,它是将某个对象作为函数的参数,在函数块中可以通过this来指代该对象,返回值为闭包函数的最后一行或者return表达式
函数定义:
|
|
with函数主要可以用来简化和集中对某一个对象的操作.
比如在JAVA中:
|
|
而在kotlin中就可以:
|
|
repeat函数
repeat为顶层函数,其实就是简化了for循环,允许重复执行闭包中的事情.
函数定义为:
|
|
例如:
|
|
takeIf函数 takeUnless函数
这两个函数都是kotlin1.1中新增加的,都是扩展函数,允许传入一个闭包.
taskIf函数如果传入的闭包返回为真,那么就返回对象T,否则返回null.
taskUnless函数与taskIf函数相反.
函数定义:
|
|
这两个函数可以用来简化filter的实现或者条件过滤
lazy函数
lazy表示延迟运算, 只有当第一次访问的时候,才调用lazy内部的初始化闭包,通过这个方式,很容易的实现一些延迟的处理.通常和by
关键字配合,实现属性的延迟加载.
函数定义:
|
|
这个函数看似神奇,内部的实现其实很简单,在内部主要是把函数闭包给封装成了LazygetValue
,然后在内部执行闭包函数,从而延迟运行.
例子:
|
|
use函数
在JDK1.7中引入了try-with-resources
表达式,允许自动的关闭某一些对象,比如最常见的InputStream
这些.
在Kotlin1.2 中也有相同功能的函数实现,那就是use函数
. use函数是一个扩展函数,扩展自Closeable
接口,因此,所有实现了Closeable
的对象都可以调用use函数来达到相同的目的.并且语法还要更简单,避免了写复杂的try-catch-finally
函数定义:
|
|
例子:
|
|
同java中的try-catch-finally
一样,无论如何,是否抛出异常,kotlin都是会执行use对象的close方法的.