kotlin|kotlin 类型系统的设计哲学
首先有必要明确一下kotlin是如何自我标榜的:简洁,空指针安全,实用,和java,JavaScript的互操作性。
Nullability
由空指针引起的著名的百万美元bug,在java里面处理方式,是引用google的optional以及Lombok库的注解。但是不得不说,optional被滥用的代码比比皆是,lombok被滥用也会给代码的可维护性增添了不消负担。这个话题,可以重新开篇文章来讨论。kotlin把解决NPE的方案,nullability的支持,放在了语言的类型设计之中。
这里有个概念:platform type(平台类型)。java当中的一个变量既可以为null,也可以不为nonNull,他是不是空不可知,既有可能为空,也可能不为空,是一种空与非空状态的叠加,这不就是薛定谔状态吗?这对于kotlin来说就是paltform type。这把锅甩给了别的程序员,别人需要在代码当中添加很多的判空操逻辑,一个不可能为空的返回值,但如果client code使用其返回值,安全起见,要需要增加判空逻辑,null像霍乱一样被传播.....
kotlin将nullable的变量声明方式单独拿出来,致使那些不可能为null的变量(在声名的时候没有尾随一个‘?’)得到了解放,妈妈再也不用担心我没value了。
kotlin只有包装类型
下面说说数据类型,重要事情说三遍:kotlin只有包装类型x3。他为什么要这么做呢? primitive(直接存value)比reference type(存放value object地址)更有效率,在complie阶段,kotlin的reference 会被编译成primitive,除了范型参数。
Any类似于java Object。乏善可陈。
nothing&unit,但我还没有完全理解,后面再更。
Nothing 类型也是亮点。用来处理不会有返回值的函数,会帮助IDE告诉我们一些代码信息。比如哪些代码是unreachable。
可变与不可变,这是一个问题
effective java里面有条原则叫:让代码尽可能的不可变(Immutable)。java当中可以对变量添加final,对集合使用像guava和eclipse提供的库来完成。kotlin在这里多做了一步,把它放在了娘胎里。比如对于一个变量的声名在:val 和var。对于一个集合也有:Collection和MutableCollection。这对于减少代码side-effect和线程安全等话题来说,是有意义的。
【kotlin|kotlin 类型系统的设计哲学】让含混的东西变的更清晰,让暧昧不清的东西变的冷淡疏离,这就是kotlin正在做的事。
推荐阅读
- 如何在Mac中的文件选择框中打开系统隐藏文件夹
- 单点登陆
- 操作系统|[译]从内部了解现代浏览器(1)
- 游乐园系统,助力游乐园管理
- 中国MES系统软件随工业化成长
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- android防止连续点击的简单实现(kotlin)
- Cesium|Cesium 粒子系统学习
- Android系统启动之init.rc文件解析过程
- mysql|InnoDB数据页结构