ad

通过《基于Kotlin的Android应用程序开发》_与成功更近一步_1.2.4 匿名方法和闭包

admin 88 2023-10-25

摘要】 本书摘自《基于Kotlin的Android应用程序开发》一书中第1章,第2节,由薛岗编著。

1.2.4 匿名方法和闭包

匿名方法是没有名字的方法,除了Lambda 表达式可用来定义匿名方法外,匿名方法还可直 接被定义。例如:

1 fun(x:Int,y:Float):Float = x*y

fun(x:Int,y: Float):Float{

4 return x * y

5 1

通过《基于Kotlin的Android应用程序开发》_与成功更近一步_1.2.4 匿名方法和闭包

上述声明可作为表达式赋给变量或常量,例如, val m=fun(x:Int,y: Float): Float =x*y。另外, 匿名方法和 Lambda 表达式可访问它们的闭包,也就是说可访问外部范围的变量。下列程序展示 一种简单的闭包访问(程序运行的结果为101):

fun main(args:Array){

2 var n = 100

fun p()(

4 n = n+1

5

6 p()

println(n)

8 1

上述程序中n 可被看成一个main方法范围内的公共变量,而方法p 与n 在同一个方法内,所 以该方法可以直接访问n, 并进行计算。基于上述程序, 一个闭包还可以这样使用:

1 val print = println("testing") 2

3 fun main(args:Array){

4 print

5 }

上述程序将print定义为一个语句,然后在main 中直接调用,程序运行结束,输出窗口会输 出“testing”。程 序 中print和 main 在同一个文件内,所以 print 可被视为文件内的公共变量,而

main 方法可直接使用print。

Kotlin 程序可基于Lambda 表达式定义“自执行闭包”,例如:

1 fun main(args:Array){

2 {a:String->println(a)}("testing")

3 }

上述程序首先定义一个Lambda 表达式,然后通过()运算符号直接调用该表达式,然后运行。

所以,程序运行结束,输出窗口会输出 “testing”。

再例如下述程序:

1 fun extend():()-> Unit{

2 var content ="string" return {

4 content +=":string"

5 println(content)

6 1

7 }

8

9 fun main(args:Array){

10 val ext = extend()

for(i in 1..3){

12 ext(

13

14 }

程序第1行定义一个函数为extend,该函数没有输入参数,输出参数是一个方法类型()->Unit, 即一个类型为()->Unit的函数;程序第2行定义一个字符串变量 content; 第 3 行 至 第 6 行 返 回 一 个匿名函数(体),该函数对 content 所包含的字符串进行修改,并打印修改过的字符串。程序第 2行到第6行可理解为content是匿名函数的全局变量。程序第10行将匿名函数赋值给 ext, 使 得 ext为一个函数(该函数没有输入参数)。程序第11行至第13行执行结束,程序会显示以下内容:

1 string: string

2 string: string: string

3 string:string: string: string

1.3 类与对象

面向对象编程思想中,类是一个封装好的程序模块。该模块具有一定业务功能,能完成指定 的工作,而且类可以被其他程序重用。 一个类具有两种技术特征:动态特征和静态特征。类的静

态特征通过类中的属性(也称为成员变量)来体现,而类的动态特征通过类的方法(也称为成员

函数)来体现。类中的属性用于记录与业务功能有关或与类实例状态有关的数值,而类中的方法 则可实现一定的业务功能,并能实现对类属性值的访问、维护和计算。

类是通过程序来描述客观事物的结果。类本身不会被计算机运行,应用程序中,类需要被实 例化以后才能运行。类实例化的过程实际上是系统为类分配相关计算资源的过程, 一个类被实例 化以后成为对象。对象是类的实例化结果,而一个类可以被实例化成为多个对象。对象是计算机 系统中实际可运行的实体。

本节将主要讨论Kotlin 面对对象的程序实现方法。相关内容涉及类、继承、接口、扩展等。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 [email protected] 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:通过《基于Kotlin的Android应用程序开发》_与成功更近一步_4.1.2 线性布局
下一篇:通过《基于Kotlin的Android应用程序开发》_与成功更近一步_1.1.2 包
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×