概述
作为一个目前主要从事Android开发的开发者,最早大概是在2017年3月第一次听说了Kotlin
这门开发语言,但是真正去了解还是在 Google 2017年的Google IO上宣布采纳Kotlin
为Android官方开发语言的时候。众所周知,Java
当年借着Android
的春风换发了第二春,这么多年过去了,Oracle 与 Google的官司一直纠缠不清,这就给了Google足够的理由寻找Java
的替代品。虽然在17年5月份中,Google 官方宣称,Kotlin
不是要取代Java
,会长期共存。但是到目前为止,看到的都是Google在Android开发上正在向Kotlin
倾斜。
例如你打开Android开发者官方网站,映入眼帘的是这样的
Kotlin简介
关于Kotlin
官方网站如是说:
Statically typed programming language for modern multiplatform applications
一门可用于跨平台开发的静态类型的编程语言。
Kotlin
是由JetBrains团队开发,就是那个做IDE
超牛逼的公司,例如 IntelliJ and ReSharper.
Kotlin
致力于跨平台开发,Kotlin
可以编译成字节码运行在JVM
上,可以编译成针对Android
平台的字节码运行在Android虚拟机中(Dalvik和ART)上,可以编译成JavaScript
运行在浏览器上,也可以编译成原生库运行在没有虚拟机的系统上,例如IOS
设备或者其他嵌入式设备。
听起来真牛逼啊,那我们接下来看看它对其他开发语言,特别是Java,有什么优势。Java即将受到一万点伤害,因为我们主要和Java7
比较,谁让我们这个专栏是有关于Android
开发的呢,而Android
对Java
新版本的支持又是如此的缓慢,到目前为止只能使用Java8
的部分功能。
与Java的互操作性
Kotlin
号称与Java
可以100%互操作,即可以互相调用,其实主要是Kotlin调用java了,因为Java作为传奇前辈,有许多优秀的类库和框架,以及遗留代码。为了使Kotlin能更大程度的被开发者接受,Java这颗大树一定的傍。
语法简洁
这可能是Kotlin与Java比起来让人一眼就能发现的优点,摒弃了Java冗长的语法。
让我们直观感受一下,下面的代码创建了一个POJO
(Plain Ordinary Java Object),其自动实现了 getters
, setters
, equals()
, hashCode()
, toString()
和 copy()
,这要是用Java写估计的上百行代码。
data class Customer(val name: String, val email: String, val company: String)
避免了臭名昭著的空引用(NullPointerExceptions)
这个相信有过Java编程经验的同学都深有体会,不知道什么时候程序就闪崩了(crash),英文世界经常说它是一个十亿美金的错误(Billion Dollar Mistake)。
而在Kotlin中,如下代码,如果定义output为非空字符串的话,赋空值是编译不过去的。
var output: String
output = null // 编译报错,无法通过编译
工具友好
就像Microsoft的Visual Studio之于C#
,JetBraints的Intelij Idea对自己的Kotlin
的支持绝对是全方位的。相信用过Intelij的你再也不想碰Eclipse了。
上面四点也是官方宣称的优势,其实Kotlin
语言的很多特性,在C#
上很多年前就有了,只能说不是Kotlin
做的太好,只怪Java
走的太慢。
Kotlin之于Android
Google
官方已于2017年接纳Kotlin
为Android
官方开发语言了,Android Studio
也从3.0开始也原生支持了Kotlin。到目前为止,Google有主推Kotlin
来做Android
开发的趋势。
Kotlin从兼容性,执行效率,与java互操作性,编译时间上与Java相比都没有劣势,但是会稍微增加apk的尺寸,大概100K,还有几百个函数。而这些和以上描述的优点相比都不是事儿,毕竟我们在APP中加个广告SDK都要好几百K,你们觉得呢?
下篇我们将会正式进入使用Kotlin做Android的探索。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/14791.html