CODE函数-英雄云拓展知识分享
167
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
上述声明可作为表达式赋给变量或常量,例如, val m=fun(x:Int,y: Float): Float =x*y。另外, 匿名方法和 Lambda 表达式可访问它们的闭包,也就是说可访问外部范围的变量。下列程序展示 一种简单的闭包访问(程序运行的结果为101):
fun main(args:Array2 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:Array4 print
5 }
上述程序将print定义为一个语句,然后在main 中直接调用,程序运行结束,输出窗口会输 出“testing”。程 序 中print和 main 在同一个文件内,所以 print 可被视为文件内的公共变量,而
main 方法可直接使用print。
Kotlin 程序可基于Lambda 表达式定义“自执行闭包”,例如:
1 fun main(args:Array2 {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:Array10 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 面对对象的程序实现方法。相关内容涉及类、继承、接口、扩展等。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~