Kotlin 变量声明和类型推断
前言
本文来回顾一下 Kotlin
变量声明的方式,并与 Java
中对比异同点,和类型推断的知识点。
本文大纲
来看一下 Java
局部变量声明的实例(成员变量的修饰符暂不讨论):
以上基本涵盖了所有情况:基础类型,字符串,对象,范型,函数返回值接收。
下面看一下 Kotlin
版的写法:
初略统计,Java
需要 254 个字符,Kotlin
需要 189 个字符。在不考虑自动补全情况下,Kotlin 变量声明的效率比 Java 高 (254 - 189) / 189 = 34.3%。在打字速度理想情况下可以达到 150~200(字符/分钟),以这个为基准,在声明这段变量 Kotlin boy
比 Java boy
能节省 20 多秒。
有兴趣可逛一下网站:livechatinc.com。点击 global-scores 可以看到全球人民的打字速度分布。
更高效率的代码编写可以提高开发效率
理清了 Kotlin
变量声明的优势后,一起来看里面的几个知识点:
1. 类型推断与 var
Kotlin
不再需要显式的声明变量的类型,取而代之的是通过赋值的类型来判断。编译器非常聪明,甚至可以把参杂多种类型的范型都能推断出来!但也有小部分情况需要显式声明,如:
被赋值的类型不是期望的类型,如想声明为其父类;
某些极限情况会出现无法推断的情形,如循环推断依赖
但的确是极小部分的情况,而且 IDE 都能给出相应提示。
声明变量使用 var / val
来代替原本的声明类型的地方。而需要声明类型的时候,在变量名后以“: Class”的形式声明,如:var abc: CharSequence = "abc"
。
新出现的编程语言基本都支持类型推断。从 Java 8 开始也支持了类型推断。
可参考:编程式语言历史
2. final 与 val
val
可以看做是 final var
,不过 Kotlin
没有 final
这个关键字,只是代表的意义是这个意思。
为什么不要 final var
,要val
这个也不是很清楚,或许就是更简洁。在 Java 中,其实也很少用final
这个关键字,虽然很多变量,类型和函数都符合 final
的设定。大部分变量我们只会设置一次,大部分的函数也不会被继承。那为什么不用上呢?唯一的原因就是因为打 final
太麻烦了!而 val 就是为了解决“final”打起来太麻烦而设计的。
final
属性其实是一个很好用的代码约束,代表这个变量后面不会再被修改。如果是个 Java
成员变量,你甚至不需要担心被设置为 null
。否则就要在很多地方加上非空判断。或者在首次维护一段代码的过程中,需要时刻考虑这个变量是否会被更改。
final
修饰,意味变量的可能性变少,在阅读代码的过程中,不需要去关注这个变量的赋值变化,这对快速读懂代码是很有帮助的。更少的变化,意味着更清晰易懂的逻辑。
版权声明: 本文为 InfoQ 作者【子不语Any】的原创文章。
原文链接:【http://xie.infoq.cn/article/3f9c6bbc74049e7fdbb4ead13】。文章转载请联系作者。
评论