前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2. 变量声明与类型推断

2. 变量声明与类型推断

作者头像
sickworm
发布2020-02-11 10:26:18
6710
发布2020-02-11 10:26:18
举报
文章被收录于专栏:sickworm

本文介绍 Kotlin 变量声明涉及的相关知识点。首先我们来回顾一下 Java 局部变量声明的几个例子(成员变量的修饰符先不讨论):

代码语言:javascript
复制
// 播放器的一些变量
boolean isPlaying = false;
final String songName = "Dingdingdong";
final ReadyForPlayingData readyForPlayingData = new ReadyForPlayingData();
WeakReference onProgressListener = new WeakReference<>(this);
ResultData result = getPlayingResult();

以上基本涵盖了所有情况:基础类型,字符串,对象,范型,函数返回值接收。接下来我们看 Kotlin 是怎么声明的:

代码语言:javascript
复制
// 播放器的一些变量
var isPlaying = false
val songName = "Dingdingdong"
val readyForPlayingData = ReadyForPlayingData();
var onProgressListener = WeakReference(this);
var result = getPlayingResult()

微微统计一下,Java 需要打 263 个字符,Kotlin 需要打 198 个字符。不考虑自动补全帮助的话,Kotlin 变量声明的效率比 Java 高 (263 – 198) / 198 = 33%。一般程序员打字速度在理想(思维行云流水)情况下可以去到 150~200 CPM (字符/分钟),这意味者在声明这段变量 Kotlin boy 比 Java boy 能节省 20~26 秒

感兴趣的同学试试这个网站:livechatinc.com。点击 global-scores 还可以看到全球人民的速度分布。 我是 232 CPM,53 WPM。考虑到编程需要输入大小写和标点,实际会慢不少。 玩完记得回来。。

更高效率的代码编写可以提高你的开发效率。诚然有很多二指禅的大神,但当你思路确定,需要快速的编写出来的一段小代码并调试的时候,这种效率的优势是实实在在的,特别在变量声明这种低思考密度的代码上。这也是现代语言的威力。

那么理清了 Kotlin 变量声明带给我们的好处后,我们一起来看一下里面的几个知识点:

1. 类型推断与 var

Kotlin 不再需要显式的声明变量的类型,取而代之的是通过赋值的类型来判断。事实证明,绝大部分情况都是 work 的。而且编译器非常聪明,甚至连参杂了多种类型的范型都能推断出来!极小部分情况需要显式声明,如:

  • 被赋值的类型不是期望的类型,如想声明为其父类
  • 某些极限情况会出现无法推断的情形,如循环推断依赖

但确实是极小部分的情况,而且 IDE 都能给出解决办法。

声明变量使用 var / val 来代替原本的声明类型的地方。而需要声明类型的时候,在变量名后以“: Class”的形式声明,如:var abc: CharSequence = "abc"

2000 年后出现的编程语言基本都支持类型推断了。连 Java 8 也开始支持类型推断。 可参考:程式語言歷史

2. final 与 val

val = final var,不过 Kotlin 没有 final 这个关键字,只是代表的意义是这个意思。这个知识点已经讲完了,再见!

开个玩笑,我们还是需要知道为什么不要 final var,要val。在 Java 年代,我们很少用 final 这个关键字,虽然很多变量,类型和函数都符合 final 的设定。大部分变量我们只会设置一次,大部分的函数也不会被继承。那为什么不用上呢?唯一的原因就是因为打 final 太麻烦了!而 val 就是为了解决“final”打起来太麻烦而设计的

final 属性其实是一个很好用的代码约束,他代表这个变量后面不会再被修改。如果是个 Java 成员变量,你甚至不需要他被担心设置为 null。否则你就要在很多地方加上非空判断。或者在首次维护一段别人代码的过程中,需要时刻考虑这个变量是否会被更改。

final 意味这这个变量的可能性变少了,我们在阅读代码的过程中,不需要再去关注这个变量的赋值变化,这对我们快速读懂代码是很有帮助的,毕竟我们脑容量都是有限的,并不能同时关注非常多的变化。更少的变化,意味着更清晰易懂的逻辑。

Swift 是 var 和 let。 版权所有,转载请注明出处: https://cloud.tencent.com/developer/article/1580860

共享此文章:

相关

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年1月5日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 类型推断与 var
  • 2. final 与 val
  • 共享此文章:
  • 相关
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档