-- 做者 谢恩铭 转载请注明出处「程序员联盟」ProgrammerLeague
原文 : www.jianshu.com/p/e04b252e7…html
随着谷歌在 2017 年 5 月的 Google I/O 中宣布 Kotlin 这门编程语言成为 Android 新官方语言,近来掀起了一阵 Kotlin 学习热潮。前端
做为一个热爱 Android 开发,有多年 Android 开发经验的嵌入式软件和 app 开发工程师,我也来写一个 Kotlin 和 Android 的系列教程。java
但愿这个教程能作到:android
- 方便你们查找资料
- 适当对比 Java 和 Kotlin 在开发 Android 应用时的不一样
- 保持不断更新,紧跟 Kotlin 官网的最新动向
- 听取你们的建议来改进
好了,话休絮繁,咱们一块儿探索吧!git
通常咱们介绍事物或人时,老是先从名字入手。好比有人也许会这样自我介绍:「我叫小明,不是黄晓明的晓明。我爸妈当初为何要给我起这个优(keng)秀(die)的名字呢?blablabla ... 」。程序员
咱们要认识 Kotlin,也能够从它的名字开始。github
Kotlin 来源于一个岛屿的名字,全称是 Kotlin Island,是英语「科特林岛」之意。这个小岛属于俄罗斯,咱们用互联网来搜索一下,它是在下图中红色标记的位置:编程
科特林岛位于俄罗斯的圣彼得堡以西约30千米处,形状狭长,东西长度约14千米,南北宽度约2千米,面积有16平方千米,扼守俄国进入芬兰湾的水道。swift
拉近点看更清楚:后端
圣彼得堡也就是之前的列宁格勒。
那么 Kotlin 编程语言为何要选这个看似名不见经传的小岛来做为本身的名字呢?
这就不得不说说 Kotlin 语言的开发者 JetBrains 公司了。
提起大名鼎鼎的 JetBrains 公司,小编必须正襟危坐,甚至敲击键盘的手指还会由于激动而略略颤抖(肯定不是青年痴呆渐渐显露的征兆?):
做为软件开发者,你应该据说过 JetBrains 公司;而做为当前的 Android 开发者,若是你不知道 JetBrains 公司,那说明你应该没用过 Google 的「亲儿子」Android Studio。
咱们能够去 JetBrains 的官网 www.jetbrains.com 瞧一瞧:
做为 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 开发第一语言,至关于「黄袍加身」,其命运当非其余语言可比。
知道了名字的由来和背后的老大们,咱们进一步来认识一下 Kotlin 本人。
Kotlin 固然是一门编程语言,但它并非「新出炉的面包」,从 2010 年就开始「烘焙」了。
说一点 Kotlin 的历史:
Kotlin 是基于 JVM 的静态类型编程语言,而 Java 也是基于 JVM 的编程语言,那么 Kotlin 比 Java 究竟有哪些优点呢?
在 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 的主要优点:
固然了,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 学习资源。
Kotlin 官网:kotlinlang.org 永远是最值得去的地方,最新的动态在官网,最权威的解释也在官网。不过须要英语还过得去,由于里面的文档和教程都是英语的。对于程序员,英语是很重要的。能够看个人这篇文章:对于程序员, 为何英语比数学更重要? 如何学习 。
Kotlin 官网的 Android 专页 :kotlinlang.org/docs/refere…
Kotlin 官方文档 PDF 版 :kotlinlang.org/docs/kotlin… 方便你们下载下来离线查看。
Kotlin 在线代码环境 :try.kotlinlang.org 有例子程序,在 Examples 里。也包含了挑战练习题,在 Kotlin Koans 里。
Kotlin 挑战练习题 :kotlinlang.org/docs/tutori… 。
Kotlin 的 Slack 社区 :kotlinlang.slack.com 。Slack 是一个聊天管理工具,能够方便加入各类 Channel 来聊天。我已经加入这个社区,Android 大牛 Jake Wharton 也在里面聊天,你能够和他私聊。不过从国内访问 Slack 速度貌似比较慢,并且容易被墙。提及来,刚过去的 2017 Google I/O 里,Jake Wharton 也做为登场嘉宾对 Kotlin 作了不少介绍,你们不妨去 jakewharton.com/kotlin-is-h… 看看。
Stack Overflow 上 Kotlin 相关问题 :stackoverflow.com/questions/t… 。
Kotlin 官方论坛 :discuss.kotlinlang.org 。
Kotlin 官网整理的连接汇总 :kotlin.link 。
Kotlin 社区汇总:kotlinlang.org/community 。
简书的 Kotlin 专题 :www.jianshu.com/c/98aaef9f5…
知乎的 Kotlin 话题:www.zhihu.com/topic/20008…
Kotlin中文社区 :kotlin.cn 我注册登录了,但感受这个网站还比较新,界面有待改进。
Kotlin 中国 :kotlintc.com 这个网站也还比较新。
Kotlin 中文网站 :www.kotlincn.net 中文页面,不过内容没有官网那么全。并且中文翻译也只作了一部分,不少连接仍是会导到英文官网的相应页面。他们的博客 www.kotliner.cn 。
Kotlin 官方参考文档中文版 :www.gitbook.com/book/hltj/k… 。
稀土掘金的 Kotlin 资源页 :juejin.im/post/591dd9… 。
Kotlin从入门到「放弃」系列视频 :github.com/enbandari/K… 。
《Kotlin for Android developers》中文翻译版 :uprogrammer.cn/kotlin-for-… 。
首先,若是你自学能力比较强,英语比较好,那彻底能够根据上面提供的各类 Kotlin 资源着手学习了,都不用继续看个人教程了。没想到,我拆本身台的功力仍是蛮强的 :P
如今很多新的编程语言都挺相似的。新开发的语言更像是已有语言优秀特性集合的产物。Kotlin 和 苹果 iOS 的官方语言 Swift 就挺像。
Kotlin 的将来应该是比较光明的,由于 Google 将其做为 Android 新的官方语言,又有 JetBrains 这样大牌的软件公司作后盾。
若是不是为了 Android 开发,那也能够学习一下 Kotlin,毕竟 Kotlin 也能够作其余事情。程序员要作到「一专多能」,精通一个领域,多接触一些其余领域。好比目前 Python(人工智能等领域的新贵)值得学习,Go 语言(被称为 21 世纪的 C 语言,著名的 Docker 就是用 Go 语言开发的)也很不错。即便不用来作开发也应该了解一下,紧跟 IT 潮流。
做为程序员,真的须要花点功夫把英语入门了。水平不用过高,有些不懂的词能够用有道词典、金山词霸等查,但应该具有基本的英语理解能力,由于不少新语言的资源都是英语的,而中文翻译的工做虽然有人作,但一方面须要时间,另外一方面难以保证最新,更况且还难以保证翻译的质量。英语好,你就比别人先行一步。
文中若有错误,欢迎指出,会更正,谢谢。
经过这一课,应该说咱们对 Kotlin 有了详细的了解,也知道该从哪里入手学习了。
下一课咱们就来搭建 Kotlin 的 Android 开发环境,讲解基本的 Kotlin 语法,而且用 Kotlin 来编写咱们的第一个 Android 应用吧。
微信公众号「程序员联盟」ProgrammerLeague
我是谢恩铭,在巴黎奋斗的软件工程师。
个人简介热爱生活,喜欢游泳,略懂烹饪。人生格言:「向着标杆直跑」