Kotlin 作为 Android 开发语言相比传统 Java 有什么优势？
首先很高兴看到Google在I/O上官网宣布 Kotlin 成为 Android 的语言。我觉得既是大势所趋，也使得Android编程上效率大增。自从写了一段时间 Python 和 Swift 语言之后，我就觉得 Java 这样“冗长”的语言应该慢慢退出历史舞台了（本来2-3行python的逻辑，Java可以写出20+行）；而 Java 之前由于其写代码“爽”和“多”成为很多程序员喜欢的点，但是历史的巨轮滚滚向前，终究我们编码会是越来越简洁，工作量越来越少。 回到问题本身，个人觉得 Kotlin 比 Java 优秀在于： 由 JetBrain 的牛人 Dmitry Jemerov 在2011年开始带队开发，主要是解决Java之前被诟病已久的问题，而且积极借鉴了 Scala、Ruby 等新语言在开发效率和简洁性上的优势。由于是全新开发和设计的语言，当然在各方面上都有着其先进性，也就是重新设计的 Java现代版；比起 Scala 更加interoperate with Java，比如说很多 Kotlin 的库都可以一直复用 Java libraries。 想必大部分程序员应该都写过Java，有些甚至写过10年以上；Java的好处是语法工整，清晰直接，严格，不容易犯低级程序错误；但是它的问题也很明显：“verbosity”，中文通俗翻译就是 “王大妈的裹脚又臭又长”。经常是 Python 或者 Ruby 10行完成的逻辑或者data class，用 Java 可以轻松轻松写出三倍多的代码。大部分程序员对此表示很无语，小数程序员可能还会陷入一种自我催眠状态，觉得自己程序码的多，于是码的爽，于是沾沾自喜于每天可以写500或者上千行代码的自我感动中。而 Kotlin 和 iOS 上 swift 的出现，可以有效地节约我们程序员不少的时间，让写代码更为有效率。 另外 Java 还有最大的一个问题，在Null的处理上一直是其阿基里斯之踵：Top 5 Crashes on Android - Apteligent 在 Android top crashes 的排名上：第一 NPE（NullPointerException），第二 OOM（OutOfMemoryException，特别对于低端手机而言）；Java 最近的改进也是在 annotation 上增加对于 null 的规范和检查。而 Kotlin 则是彻底规范了对于变量在 null 上检查和支持 "?:" 来简洁地处理 null。比如： 从上面可以看到在检查和处理 nullable 变量的时候，Kotlin 更加有效。 另外 Kotlin 先进的地方还有 Lamda、Extension function、when 等；都是现在语言默认支持的特性。这里就不一一介绍了。 其实之前我最为担心的问题是：Kotlin 会不会像 Scala 或者 Groovy 或者 Clojure 那样，“先进”但是曲高和寡，最后导致没人用。经过这次的 Google IO 的官方支持，我现在200%确定 Kotlin 会是以后 Android 上主流语言的方向，所以各位现在就开始学习吧。 附带我觉得最为有效的Kotlin学习方法： 1. 先快速浏览：Basic Syntax - Kotlin Programming Language 2. 对于Java选手，附加看这个：From Java to Kotlin 3. 上手跟着这个tutorial一步一步完成它的练习：Try Kotlin 4. 把 Cheatsheet 打出来贴在显示器旁边没事看看：https://pbs.twimg.com/media/C0yRbHLUUAAgacl.jpg 5. 文字版本 Cheatsheet：
https://gist.github.com/dodyg/5823184
https://gist.github.com/dodyg/5616605
其实，由于 google 基因中存在某种「浅尝辄止，见到不好就收」的特性，所以在当初，谁也不知道会如何，也无法预料该如何。 不过现在，大概情况已经清晰了，Kotlin 在 Android 平台被扶正，将作为Android开发第一语言。 一种语言，是与其提供的编程框架，运行库，高度绑定的。Google大力发展基于kotlin的androidx库，jetpack库，compose库，很多新特性其实都是为kotlin优化的，可以说，如果不跟进kotlin，将很难跟进今后android开发领域标准库的发展步伐。 那么使用Kotlin相比Java有什么好处呢？ 首先，是将语言特性的发展与jvm虚拟机脱钩。 java语言设计得太早，一部分近年来兴起的新特性不那么容易加上，虽然java也在不断迭代，但java的迭代是与java虚拟机绑定的，要想使用新版本的java语言，就必须升级到新版本的java虚拟机。而java虚拟机的升级对很多项目来说都比较困难。 Kotlin基于jvm，但不依赖高版本jvm，在工业界依然还是jvm1.8天下的情况下，升级jvm某种程度上是奢望。而kotlin可以在保持jvm1.8前提下不断迭代新的语言特性，跟进现代的编程语言发展之步伐。 其次，是新语言可以避免背上历史包袱。kotlin语言的应用范围并不广泛。但正因为它的应用范围不广泛，所以kotlin语言的发展不会有过多的历史包袱，我们知道Java跟C++增加任何特性都需要考虑与旧版本的兼容性。而他们已经存在了二三十年，需要兼容的特性越来越多，历史包袱越来越多就会导致进步越来越困难。 反观苹果的Swift就可以不断迭代12345很多个版本，因为没有历史包袱。kotlin目前也来到了第5个大的修订版本，这个走的路线基本是跟swift类似的。 最后，是kotlin提供了一些新的库，比如kotlin协程，比如给现存具体类直接外挂新成员函数的机制，这些都是java不具备的，考虑到android的一些新编程框架大多在kotlin下有更好的表现。在有条件的情况下完全可以开始考虑将新的开发任务切换到kotlin了。 