Android遇上Kotlin | 第一部分第一课 : Kotlin若只如初见

2,321 阅读14分钟

-- 作者 谢恩铭 转载请注明出处「程序员联盟」ProgrammerLeague
原文 : www.jianshu.com/p/e04b252e7…

内容简介


  1. 前言
  2. Kotlin的名字由来
  3. Kotlin是什么
  4. Kotlin的优势
  5. Kotlin学习资源
  6. 总结
  7. 第一部分第二课预告

1. 前言


随着谷歌在 2017 年 5 月的 Google I/O 中宣布 Kotlin 这门编程语言成为 Android 新官方语言,近来掀起了一阵 Kotlin 学习热潮。

作为一个热爱 Android 开发,有多年 Android 开发经验的嵌入式软件和 app 开发工程师,我也来写一个 Kotlin 和 Android 的系列教程。

希望这个教程能做到:

  • 方便大家查找资料
  • 适当对比 Java 和 Kotlin 在开发 Android 应用时的不同
  • 保持不断更新,紧跟 Kotlin 官网的最新动向
  • 听取大家的建议来改进

好了,话休絮繁,我们一起探索吧!

2. Kotlin的名字由来


一般我们介绍事物或人时,总是先从名字入手。比如有人也许会这样自我介绍:「我叫小明,不是黄晓明的晓明。我爸妈当初为什么要给我起这个优(keng)秀(die)的名字呢?blablabla ... 」。

我们要认识 Kotlin,也可以从它的名字开始。

Kotlin 来源于一个岛屿的名字,全称是 Kotlin Island,是英语「科特林岛」之意。这个小岛属于俄罗斯,我们用互联网来搜索一下,它是在下图中红色标记的位置:

科特林岛位于俄罗斯的圣彼得堡以西约30公里处,形状狭长,东西长度约14公里,南北宽度约2公里,面积有16平方公里,扼守俄国进入芬兰湾的水道。

拉近点看更清楚:

圣彼得堡也就是以前的列宁格勒。

那么 Kotlin 编程语言为什么要选这个看似名不见经传的小岛来作为自己的名字呢?

这就不得不说说 Kotlin 语言的开发者 JetBrains 公司了。

提起大名鼎鼎的 JetBrains 公司,小编必须正襟危坐,甚至敲击键盘的手指还会因为激动而略略颤抖(确定不是青年痴呆渐渐显露的征兆?):

作为软件开发者,你应该听说过 JetBrains 公司;而作为当前的 Android 开发者,如果你不知道 JetBrains 公司,那说明你应该没用过 Google 的「亲儿子」Android Studio

我们可以去 JetBrains 的官网 www.jetbrains.com 瞧一瞧:

JetBrains 官网

作为 Android 开发者,应该有些激动,因为我们看到了左下角的 IntelliJ IDEA 的图标,IntelliJ IDEA 也是一个 IDE(IDE 是 Integrated Development Environment,「集成开发环境」的意思),是一个强大的 Java 集成开发环境,安装上 Android 的 Plugin(插件)后可以用来开发 Android 应用。

而 Google 推出的 Android 官方集成开发环境 Android Studio 就是基于 IntelliJ IDEA 。

这样说也许不准确,应该说 Android Studio 和 IntelliJ IDEA 的 Android 插件 是从同一个源码开始构建的。现在 Google 负责开发 Android Studio,等 Android Studio 发布之后,IntelliJ IDEA 再把 Google 的插件拿去测试并发布。

或者说,Android Studio 纯粹用于 Android 开发。IntelliJ IDEA 能做的事情比较多,但是不专精于 Android 开发。而且因为上面说到的顺序问题,IntelliJ IDEA 的 Android 插件是会相对滞后于 Android Studio 的。因此做 Android 开发最好用 Android Studio。

目前 Android Studio 所用的 JVM(JVM 是 Java Virtual Machine 的缩写,也就是「Java 虚拟机」的意思)是 JetBrains 公司的,见下图 Android Studio 的介绍:

看到上图中那行「JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o 」了吗?

关于 IntelliJ IDEA 和 Android 之间的「恩怨情仇」,可以去官方的 IntelliJ IDEA 和 Android FAQ 看看。

接着,我们可以点击 JetBrains 主页的 IDEs 那个菜单进去看看,可以看到有 12 个 IDE :

上面的 IDE 中,除了刚才介绍过的 IntelliJ IDEA,比较著名的有:

  • WebStorm :做网络开发的朋友应该有用过,极为强大的 JavaScript 集成开发环境。被广大中国 JS 开发者誉为「Web 前端开发神器」、「最强大的 HTML5 编辑器」、「最智能的 JavaScript IDE」等。我以前略微用过。

  • PyCharm :结合了 Django 框架的 Python 集成开发环境。我在工作中写 Python 程序喜欢用 PyCharm。

  • PhpStorm :号称「世界上最好的编程语言」PHP 的集成开发环境。

  • CLion :C 和 C++ 集成开发环境。

  • RubyMine :结合了 Ruby on Rails 框架的 Ruby 集成开发环境。

  • Gogland :Go 语言的集成开发环境。

感觉 JetBrains 出品的各个 IDE 长得都比较像。这些年 JetBrains 在 IT 界可谓是风生水起。几乎可以说:「JetBrains 出品,必属精品」。不禁联想到当年「暴雪出品,必属精品」的口碑。

再扯回 Kotlin 的名字由来(小编你还记得回来...)。原来,JetBrains 是来自捷克的公司,公司总部位于捷克首都布拉格,在俄罗斯的圣彼得堡和美国的波士顿都设有分公司。

Kotlin 的主要开发工作是由俄罗斯的圣彼得堡分公司的程序员团队完成的。
他们说:Java 语言的名字是来自于一个岛,那个岛就是印度尼西亚的爪哇(Java)岛,因盛产咖啡而闻名。所以 Kotlin 也得选一个岛作为名字。

我们所见到的 Java 标志,总是一杯热咖啡。Java 语言的许多库的类名称,多与咖啡有关:如 JavaBeans(爪哇豆)、NetBeans(网络豆)以及 ObjectBeans(对象豆)等等。bean 是英语「豆」的意思,咖啡豆就是 coffee bean。

由此看来,Kotlin 确实有取代 Java 的雄心。

当然了,许多语言都认为自己可以取代 Java。比如目前有 Scala、Fantom、Groovy、Gosu、和 Ceylon,而 Scala 和 Groovy 最为流行。

但 Kotlin 已经被 Google 钦点为 Android 开发第一语言,相当于「黄袍加身」,其命运当非其他语言可比。

3. Kotlin是什么


知道了名字的由来和背后的老大们,我们进一步来认识一下 Kotlin 本人。

Kotlin 当然是一门编程语言,但它并不是「新出炉的面包」,从 2010 年就开始「烘焙」了。

说一点 Kotlin 的历史:

  • 2010 年 :JetBrains 着手开发 Kotlin。
  • 2011 年 7 月 :JetBrains 公开宣布 Kotlin。
  • 2012 年 2 月 :JetBrains 在 Apache 2 许可证下开源了 Kotlin 的源码。目前 Kotlin 的官方源代码在 Github 上 github.com/JetBrains/k…
  • 2016 年 2 月 :JetBrains 发布了 Kotlin 1.0 版,算是比较稳定的正式版。许诺之后一直会保持向后兼容。
  • 2017 年目前最新版本 :1.1.2(2017 年 6 月)。相比 Kotlin 1.0 版本时,和 Kotlin 有关的代码数目从 210 万行飞升到 1000 多万行。

图片来自 Programiz

Kotlin 是基于 JVM 的静态类型编程语言,而 Java 也是基于 JVM 的编程语言,那么 Kotlin 比 Java 究竟有哪些优势呢?

4. Kotlin的优势


在 Kotlin 之前,JetBrains 团队一直使用 Java 来创建他们的 IDE。那为什么他们要开发一门新的编程语言呢?

JetBrains 团队之所以开发 Kotlin 这门新语言,是因为他们对已经存在的语言略有失望。这和 Go 语言的发明动机类似。

当时,Java 和其他语言都不能满足 JetBrains 的需求,而 Scala 语言虽然不错,但无奈编译时间太长,于是 Kotlin 因运而生。

Kotlin 从不少语言获得灵感,比如 Java、Scala、Groovy、C#、Gosu,可以说是博采众长。既具备了快速开发的能力,编译运行也快,实现相同功能的代码长度可以比 Java 少很多。

有一个网站 fabiomsr.github.io/from-java-t… 是对比 Java 和 Kotlin 的基本语法。在这个网站上可以看出 Kotlin 比 Java 精简很多。 Kotlin 官网也有 Java 和 Kotlin 对比的页面:kotlinlang.org/docs/refere…

我们来列举一下 Kotlin 的主要优势:

  • 多平台开发的可能 :基于 JVM 的开发,Android 开发,Web 开发,Native(原生)开发。其中 Web 开发可以结合 Spring 框架,而且 Kotlin 也可以编译生成 JavasSript 模块,可以在一些 JavaScript 的虚拟机上编译。Native 开发就更牛了,目前 Kotlin 官方在 Github 开源了 Native 开发的源码 github.com/JetBrains/k… LLVM(Low Level Virtual Machine 的缩写,表示「底层虚拟机」。LLVM 是一种编译器基础设施,以 C++ 写成。它是为了任意一种编程语言而写成的程序,利用虚拟技术创造出编译时期、链接时期、运行时期以及闲置时期的最优化。)的后端,方便为各个平台编写原生应用,比如为 Mac OS,iOS,Linux,嵌入式系统,等等。

  • 开源:闭源项目总归比较有限。众人拾柴火焰高,代码开源可以更快速地发现 Bug,有了全世界各地程序员的贡献,Kotlin 的优秀代码和库会越来越多。Linux 系统就是开源的很好例子。

  • 和 Java 100% 兼容 :Kotlin 调用 Java 已有的代码或库没有问题。在一个项目中也可以同时用 Java 和
    Kotlin 来编写代码。Android Studio 和 IntelliJ IDEA 都可以实现一键转换 Java 代码到 Kotlin。官方也有专页介绍:www.jetbrains.com/help/idea/2…

  • 安全 :大家聊得最多的肯定是可以轻松防止在 Java 中很常见的 NullPointerException(空指针异常)问题咯。做 Android 开发的一定深有体会,一般 app 奔溃,基本都是因为 NullPointerException,很多时候规避机制就是加一个 if 语句的判断,很累赘。

  • 容易学习 :Kotlin 语法很简单,和主流语言类似,语法高效,入门非常容易。好比当初苹果发布 Swift 也是因为 OC 的语法奇怪,学习曲线比较陡峭。

  • Lambda 表达式。

  • 变量类型推断。

  • when 语句块 :告别繁琐的 Switch 和 if... else if... else 语句块。

  • 非常方便的运算符重载。

  • 不再需要手动添加 get 和 set 方法对了,直接对类的私有变量赋值和取值。

  • Anko 这样的 Kotlin 的官方库可以使 Android 应用开发更快捷。

  • 函数/方法 的关键字是 fun,而不是 function。真的很简洁也很有趣(fun 是英语「有趣」的意思)。

  • Var 和 Val 关键字 :和 fun 关键字类似,也很简洁。Var 是 Variable(英语「可变的」之意)的缩写,表示「可变的」变量。Val 应该是 Value (英语「值」之意)的缩写,表示只能赋值,而不能改写其值,是表示「只读的」变量,有点类似 C 语言中的 const 变量。这两个关键字的起名应该是参考了 Scala 语言。

  • 类的方法扩展很方便。

  • 可以创建自定义的 DSL(领域特定语言)。

  • 优秀工具的支持 :JetBrains 公司开发了那么多优秀的工具,Kotlin 可以完全享用。

  • Coroutine :协程。

可以用下图来大致总结 Kotlin 的主要优势:

图片来自 Programiz

当然了,Kotlin 的优势肯定不止这些,篇幅关系我们不可能一一列举。之后的课程中,会让大家见识的。

正是因为 Kotlin 的这些优势,才得到 Google 的垂青,新出任 Android 开发第一把交椅。现在 Android 还是很火的,国内貌似 iOS 开发的热度稍微下降了些,但各大学习平台 Android 的火爆程度还是很高,虽然要找个好的 Android 开发职位比以前难了。

现在 Android 和 Kotlin 一联手,那家伙,简直是「AK47」啊。

专治各种不服

说来有趣,目前 Kotlin 被 Google 宣布为 Android 官方语言,而它和 Android 的竞争对手 -- 苹果的 iOS 的官方语言 Swift 很像,有个网站 nilhcem.com/swift-is-li… 是专门对比 Kotlin 和 Swift 的语法的,很有趣。

很多大公司也早已开始用 Kotlin 了,例如 Pinterest,Netflix,Gradle,Uber(个人对 Uber 公司的企业文化比较反感),Trello :

使用 Kotlin 的大公司

有了这么多大公司的支持,开源社区的维护,Kotlin 要再没有明天那简直「天理不容」啊。

5. Kotlin学习资源


中外 Kotlin 学习资源。

英语资源


Kotlin 社区

中文资源


6. 总结


  1. 首先,如果你自学能力比较强,英语比较好,那完全可以根据上面提供的各种 Kotlin 资源着手学习了,都不用继续看我的教程了。没想到,我拆自己台的功力还是蛮强的 :P

  2. 现在不少新的编程语言都挺类似的。新开发的语言更像是已有语言优秀特性集合的产物。Kotlin 和 苹果 iOS 的官方语言 Swift 就挺像。

  3. Kotlin 的未来应该是比较光明的,因为 Google 将其作为 Android 新的官方语言,又有 JetBrains 这样大牌的软件公司做后盾。

  4. 如果不是为了 Android 开发,那也可以学习一下 Kotlin,毕竟 Kotlin 也可以做其他事情。程序员要做到「一专多能」,精通一个领域,多接触一些其他领域。比如目前 Python(人工智能等领域的新贵)值得学习,Go 语言(被称为 21 世纪的 C 语言,著名的 Docker 就是用 Go 语言开发的)也很不错。即使不用来做开发也应该了解一下,紧跟 IT 潮流。

  5. 作为程序员,真的需要花点功夫把英语入门了。水平不用太高,有些不懂的词可以用有道词典、金山词霸等查,但应该具备基本的英语理解能力,因为很多新语言的资源都是英语的,而中文翻译的工作虽然有人做,但一方面需要时间,另一方面难以保证最新,更何况还难以保证翻译的质量。英语好,你就比别人先行一步。

文中如有错误,欢迎指出,会更正,谢谢。

7. 第一部分第二课预告


通过这一课,应该说我们对 Kotlin 有了详细的了解,也知道该从哪里入手学习了。

下一课我们就来搭建 Kotlin 的 Android 开发环境,讲解基本的 Kotlin 语法,并且用 Kotlin 来编写我们的第一个 Android 应用吧。


微信公众号「程序员联盟」ProgrammerLeague
我是谢恩铭,在巴黎奋斗的软件工程师。
我的简介
热爱生活,喜欢游泳,略懂烹饪。
人生格言:「向着标杆直跑」