1.声明一个属性的完整语法是

var <propertyName>[: <PropertyType>] [= <property_initializer>][<getter>][<setter>]

初始器initializer、getter、setter都是可选的。如果PropertyType类型可以从初始器initializer、getter中推导出来,那么也是可以省略的。
例如:

var data1 = 1 // 类型 Int、默认 getter 和 setter
var data2 : Int? //错误,没有初始化,需要显示初始化器

只读属性用val关键字替代var,并且只读属性不能有setter。
我们可以自定义访问器,如果定义了setter,那么每次给属性赋值时都会调用它。如果定义了getter,那么每次访问该属性时都会调用它。
例如:

val videoHeight: Intget() = mediaplayer?.videoHeight ?: 0var videoName: Stringget() = mediaplayer?.name ?: "video"set(value){filed = value}

Setter 的参数名默认是value,当然也可以改成自己喜欢的名字。
Setter的field标识符叫做幕后字段,只在访问器中出现。

2.延迟属性委托 by lazy
Kotlin 提供by lazy的方式实现懒加载委托,也就是在data第一次使用的时候才开始加载。
by lazy的方式,只用于val定义的属性。
例如:

val testData: String by lazy{println("initdata!")"hello"
}fun main(){println(testData)println(testData)
}//打印输出
initdata!
hello
hello

3.内置函数let、also、with、run、apply
let是一个域作用函数,定义一个变量在一个特定的作用域范围内,避免写一些重复判空的操作
例如:

//不适用域函数
mVarms?.function1()
mVarms?.function2()
mVarms?.function3()//使用域函数
//使用it替代object对象去访问其公有的属性 & 方法
mVarms?.let{it.function1()it.function2()it.function3()
}

also和let的用法一致,只是返回的时候,also是返回最后一行表达式结果,而also是返回的it执行后的变量
例如:

var result = mVarms?.let{it.function1()it.function2()it.function3()999
}  //返回的结果是999赋值给resultvar result = mVarms?.also{it.function1()it.function2()it.function3()999
}  //返回的是mVarms对象本身赋值给result

with是用在需要多次调用对象属性或者方法的时候,可省去对象名称
例如:

val people = People("mike", 28)
with(people){println("my name is $name, and i'm $age years old")
}

run是结合了let和with的用法,而apply则是结合了also和with的用法
例如:

val people = People("mike", 28)
var result = people?.run{println("my name is $name, and i'm $age years old")999
} //   返回999var result = people?.apply{println("my name is $name, and i'm $age years old")999
} //   返回people

kotlin实践笔记相关推荐

  1. Kotlin学习笔记20 阶段复习2

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 lambda表达式 内联函数 Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数_积跬步 至千里- ...

  2. Kotlin 学习笔记(八)—— Kotlin类与对象之接口

    Kotlin 学习笔记(八)-- Kotlin类与对象之接口 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- 基础 ...

  3. webpack 实践笔记(一)--- 入门

    webpack 实践笔记入门(一) [webpack官网文档地址]:(http://webpack.github.io/docs...) [实践工程地址]: (https://github.com/s ...

  4. 基于 Docker 和 GitLab 的前端自动化部署实践笔记

    基于 Docker 和 GitLab 的前端自动化部署 实践笔记 随着接触的项目越来越多,在部署测试流程上重复耗时工作也越来越多,所以对前端工作的CI/CD实现愈发迫在眉睫. 前端开发由于三大框架的崛 ...

  5. Kotlin学习笔记(3)- 语法

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  6. Kotlin学习笔记(2)- 空安全

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  7. Kotlin学习笔记(1)- 环境配置

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  8. kotlin学习笔记——枚举、封闭类

    1.枚举 kotlin中提供类枚举的实现,与java相同.枚举可以带参数,如 enum Icon(val res: Int){MENU(R.drawable.menu),BACK(R.drawable ...

  9. kotlin学习笔记——重载操作符

    Kotlin中有很多操作符可以使用,具体可以见kotlin学习笔记--操作符_There is a Bug!!!-CSDN博客 Kotlin的一个特点就是可以重载这些操作符,为操作符赋予不同的行为. ...

最新文章

  1. 【机器学习入门笔记0:OpenCV+TensorFlow学习内容(目录)】20190122
  2. Redis常见配置redis.conf
  3. Visio工具 UML的建模
  4. 世纪渣男何书桓! | 今日最佳
  5. 微信小程序云开发教程-微信小程序的JS高级-页面间数据传递
  6. Web系统Login拦截器
  7. 网页唤起QQ临时会话
  8. lnmp 一键安装
  9. android 声音不想从蓝牙手机中出来,Android蓝牙音频两个问题
  10. 英特尔处理器排名_鲁大师公布三季度PC处理器、内存排行榜:AMD成最大赢家
  11. Docker 搭建Pika分片多主集群(Docker Codis Pika Replication Sharding)
  12. java短信验证码_java实现发送短信验证码
  13. python中quadratic,Python: Using CVXOPT for quadratic programming
  14. Android Edittext 手机号码格式输入设置
  15. 高等数学拾遗 矢量分析
  16. CSAPP 第三版 第十章 家庭作业and so on
  17. DOS系统和windows系统有什么区别
  18. 关于计算机科学与技术学科和软件工程学科的区别
  19. 宿州学院计算机录取分数线,2017宿州学院录取分数线
  20. redis的key都变成了backup,值也都不见了,这是为什么呢?

热门文章

  1. JavaWeb用户信息管理系统(附全部代码)
  2. matlab 调日法,【图】手表调日期方法 教你各种表的使用教程_手表调日期_伊秀服饰网|yxlady.com...
  3. 繁星的舞蹈依旧没有变
  4. Android初级教程人品计算器
  5. ThreadPoolExecutor源码阅读笔记(二)FutureTask
  6. 用Python做动态时钟
  7. 基于arduino的简易警报器
  8. android studio创建 styles v19 styles v21
  9. 黄冈师范学院计算机学院专业,黄冈师范学院数学与计算机科学学院介绍
  10. set集合完整版整理