写点什么

Kotlin 变量声明和类型推断

作者:子不语Any
  • 2022-11-14
    湖南
  • 本文字数:1260 字

    阅读完需:约 4 分钟

Kotlin变量声明和类型推断

前言

本文来回顾一下 Kotlin 变量声明的方式,并与 Java中对比异同点,和类型推断的知识点。

本文大纲


来看一下 Java 局部变量声明的实例(成员变量的修饰符暂不讨论):


// 播放器的一些变量boolean isPlaying = false;final String songName = "七里香";final ReadyForPlayingData readyForPlayingData = new ReadyForPlayingData();WeakReference<OnProgressListener> onProgressListener = new WeakReference<>(this);ResultData result = getPlayingResult();
复制代码


以上基本涵盖了所有情况:基础类型,字符串,对象,范型,函数返回值接收。


下面看一下 Kotlin 版的写法:


// 播放器的一些变量var isPlaying = falseval songName = "七里香"val readyForPlayingData = ReadyForPlayingData();var onProgressListener = WeakReference<OnProgressListener>(this);var result = getPlayingResult()
复制代码


初略统计,Java 需要 254 个字符,Kotlin 需要 189 个字符。在不考虑自动补全情况下,Kotlin 变量声明的效率比 Java 高 (254 - 189) / 189 = 34.3%。在打字速度理想情况下可以达到 150~200(字符/分钟),以这个为基准,在声明这段变量 Kotlin boyJava 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修饰,意味变量的可能性变少,在阅读代码的过程中,不需要去关注这个变量的赋值变化,这对快速读懂代码是很有帮助的。更少的变化,意味着更清晰易懂的逻辑。

发布于: 刚刚阅读数: 4
用户头像

子不语Any

关注

If not now,when? 2022-09-17 加入

安卓攻城狮

评论

发布
暂无评论
Kotlin变量声明和类型推断_kotlin_子不语Any_InfoQ写作社区