kotlin的可变价值
来源:互联网 发布:做网络销售怎么样 编辑:程序博客网 时间:2024/05/16 17:29
科特林的可变价值
当我第一次学习科特林,差异val和var看似简单:val意味着不变,var意味着可变。
真相比这更微妙:val并不意味着不变,val意思是只读。这意味着您不能明确写入val,但不能保证它们是不可变的1。
可变类属性
对于变量,immutable和read-only之间的区别是一个模糊点。没有办法写一个val变量或者覆盖它是如何被检索的,所以它(对于所有意图和目的)是不可变的。
然而,对于类属性,只读性质val产生巨大差异。
在属性的上下文中,valvs. var表示属性是否存在getter / setter。A var既有吸气剂又有吸气剂,而val只有吸气剂。
在简单的情况下,缺少setter意味着val类属性是不可变的。但是,可以为任何类属性添加一个自定义getter函数,允许您在每次有人访问该属性时返回任何所需的内容。例如:
class Person(val birthDay: DateTime) {
val age: Int
get() = yearsBetween(birthDay, DateTime.now())
}
如您所见,没有明确的设置方式Person.age,但Person.age会随当前日期的更改而改变值。
事实上,Person.age作为一个变量的思考根本就是一个不正确的词。它实际上是一个getter函数,你可以调用它可能会改变调用值。
后果
当我了解Kotlin的可变值时,我亲自感到恐惧。我觉得被背叛了 - val而不是var将数据标记为不可变的,而且可变的是Kotlin我学到的第一个很酷的功能之一!
据我所知,对于val属性可定制的getter有两个参数:
类属性仅仅是getter / setter的缩写,而定制的getter通常被认为是好的。
可定制的getter启用委托属性。
委托的属性是一个引人注目的用例,我将继续使用它们。但是,当我想到val一个不可替代的引用时,我觉得代码更简单。不变性使代码(特别是并发代码)更容易使用。
因此,我选择不为val类属性使用定制getter 。如果只读类属性随时间更改值,则替换该属性与正常函数:
class Person(val birthDay: DateTime) {
fun age(): Int = yearsBetween(birthDay, DateTime.now())
}
这个偏好是Kotlin编码约定的建议。它表示,只有当底层算法时,您应该优先于一个函数:
不投掷
具有O(1)复杂性
很便宜的计算(或在第一次跑步)
通过调用返回相同的结果
覆盖吸气剂并更改参考线违反了最后的条件,所以避免这样做!
为了简洁起见,在这篇文章中,“不可变的”实际上意味着“不可变的参考”。您可以随时引用可变对象(如ArrayList)。在这种情况下保护可变性需要比使用val的更先进的技术,我不会进入这里。↩
- kotlin的可变价值
- Kotlin传递可变长参数给Java可变参数方法
- Kotlin的初窥之kotlin配置
- Kotlin:Google让我们使用Kotlin的理由
- Kotlin第二章:Kotlin 的基本语法
- Kotlin学习(学习kotlin的日子)
- Kotlin初探:Kotlin的集合操作符
- 生命的价值
- blogger的价值
- 人的价值,几何
- 不同鹦鹉的价值
- 创新的价值
- 不同鹦鹉的价值
- [转贴]生命的价值
- 个人价值的体现
- 生命的价值
- 价值 永恒的对抗
- 一个人的价值
- Maven仓库被墙,抽空研究下setting.xml 配置
- Teigha 40010 保存设置Wipeout时的边界显示问题
- 利用qqbot记录QQ聊天信息
- Leetcode算法学习日志-447 Number of Boomerangs
- JS中通用的contains方法判断两个节点的关系
- kotlin的可变价值
- JS 数据类型转换
- 为什么使用mq?
- 在OpenCV环境下做导向滤波的代码
- 独热编码 OneHotEncoder()
- Java
- Mybaities 批量操作数据库报错,抛MySQLSyntaxErrorException异常
- 欢迎使用CSDN-markdown编辑器
- Leetcode35.Search Insert Position