芬兰湾的科特林中常见内联扩展函数的使用方法教程

  

  

芬兰湾的科特林一个强大之处就在于它的扩展函数,巧妙的运用这些扩展函数可以让你写出的代码更加优雅,阅读起来更加流畅、下面总结了在开发中经常用到的一些内联扩展函数。经常有小伙伴搞不懂,运行,应用等等这些函数该怎么用,在哪里用,我的建议是先记住每个函数的功能(无非就是它需要什么参数?返回值是什么?)记住这两点再根据实际开发中的场景慢慢的就能熟练运用了。其实这些函数极其类似,不同的函数可以完成同样的功能,通过下面的实例也能看的出。而在我以往的开发经验中这些函数主要的使用场景有两个,一是非空判断,二是对象的初始化或者本身及方法的频繁调用。

  

内联和正常函数的区别不在于定义函数的异同点。定义的时候只需要加一个标识,就可以让正常函数变为内联函数。实际两者的区别是在实际执行时的处理机制上。内联是耗用性能低,比正常函数少了压栈和出栈的操作,是一种以空间换时间的方式。当函数体少,以及被频繁调用的函数才适合被定义为内联函数

  

  

定义:<代码>有趣& lt; T, R>(接收方:T,布洛克:T ()→):R

  

功能:将对象作为函数的参数,在函数内可以通过这指代该对象。返回值为函数的最后一行或返回表达式。

  

<>强实例:
  

  

1。在自定义视图中当我们初始化画笔时很多时候我们会写下边的代码

        var=油漆涂料()   油漆。颜色=Color.BLACK   油漆。strokeWidth f=1.0   油漆。textSize f=18.0   油漆。isAntiAlias=true      

如果使用,那么就可以写成这样

        var=油漆涂料()   (油漆){   颜色=Color.BLACK   strokeWidth f=1.0   textSize f=18.0   isAntiAlias=true   }      

省去了油漆。后书写起来感觉会更加自然
  

  

2。在声明一些集合的场景比如:

        var=mutableListOf<列表;String> ()   list.add (“1”)   list.add (“2”)   list.add (3)      

使用,可以写成

        var=列表(mutableListOf ()) {   添加(“1”)   添加(“2”)   添加(“3”)   这   }      

开发中还有很多场景可以使用的功能,理解了与的功能也就能够灵活运用了。

  

  

takeif   

定义:<代码>有趣& lt; T>T。takeIf(谓词:(T)→布尔):t # 63;

  

功能:传递一个函数参数,如果函数结果为真的,返回T对象,否则返回零。

  

实例:使用文件文件时通常会判断文件是否存在,比如

        var=文件(“filePath”)   如果(file.exists ()) {//做某事   其他}{   返回假   }      

使用takeif后

        var=文件(“filePath”)。takeIf {it.exists()} & # 63;:返回false//做一些      

takeUnless   

定义:<代码>有趣& lt; T>T。takeUnless(谓词:(T)→布尔):t # 63;

  

功能:与takeIf相反,参数函数返回假时返回T对象,否则返回零,这里不再举例。

  

  

定义:   

(1) <代码>快乐& lt; R>运行(布洛克:()→):R
  

  

(2) <代码>快乐& lt; T, R>T.run(布洛克:t ()→):R

  

功能:调用运行函数返回值为函数体最后一行,或返回表达式。

  

<>强实例:
  

  

返回最后一行

        kotlin.run {   println(“十一”)   println (22)   }      

结果:   

I/系统。11:

  

I/系统。:22

  

返回返回表达式,返回后面的代码不再执行(注意写法@run)

        kotlin.run {   return@run println(“十一”)   println (22)   }      

结果:
  

  

I/系统。11:

  

  

定义:<代码>有趣的重复(时间:Int,行动:(Int)→代码单元)

  

功能:重复执行行动函数*次*从0开始

  

实例:与循环功能类似,例如

        重复(5){println(计数:美元)}      

等价于         (我在0 . . 4){println(数:$ i)}      

或者      

芬兰湾的科特林中常见内联扩展函数的使用方法教程