“近一百多年来,总有一些公司很幸运地、有意识或无意识地站在技术革命的浪尖之上。一旦出在了那个位置,即使不做任何事,也可以随着波浪顺顺当当地向前飘个十年甚至更长时间。在这十几年间,它们代表着科技的浪潮,直到下一波浪潮的来临。”
—— 吴军 《浪潮之巅》
正如作者吴军所言,“在工业史上,一种新技术代替旧的技术是不以人的意志为转移的。”浪潮和巨头以一种相辅相成的关系一次次推动IT行业的进化,这样看来,“寻找下一个谷歌”,就是在“寻找下一个浪潮”。
对于互联网的基础——编程语言而言,一个语言的发展,影响着所使用编程语言的程序员的从业率和开发效率,间接影响着一个软时代的发展效率。快而优雅,Kotlin语言就是为此而生。
起源
万物皆有起源,要说起Kotlin的起源,我们不妨先看看他的前辈,同为JVM语言Java的起源。
1991年4月,由James Gosling博士领导的绿色计划(Green Project)开始启动,此计划的目的是开发一种能够在各种消费性电子产品(如机顶盒、冰箱、收音机等)上运行的程序架构。这个计划的产品就是Java语言的前身:Oak(橡树)。
1995年5月23日,Oak语言改名为Java,并且在SunWorld大会上正式发布Java 1.0版本。Java语言第一次提出了“Write Once,Run Anywhere”的口号。
1996年1月23日,JDK 1.0发布,Java语言有了第一个正式版本的运行环境。JDK 1.0提供了一个纯解释执行的Java虚拟机实现(Sun Classic VM)。JDK 1.0版本的代表技术包括:Java虚拟机(JVM)、Applet、AWT等。
1997年2月19日,Sun公司发布了JDK 1.1,Java技术的一些最基础的支撑点(如JDBC等)都是在JDK 1.1版本中发布的,JDK 1.1版的技术代表有:JAR文件格式、JDBC、JavaBeans、RMI。Java语法也有了一定的发展,如内部类(Inner Class)和反射(Reflection)都是在这个时候出现的。
1998年12月4日,JDK迎来了一个里程碑式的版本JDK 1.2,工程代号为Playground(竞技场),Sun在这个版本中把Java技术体系拆分为3个方向,分别是面向桌面应用开发的J2SE(Java 2 Platform, Standard Edition)、面向企业级开发的J2EE(Java 2 Platform, Enterprise Edition)和面向手机等移动终端开发的J2ME(Java 2 Platform, Micro Edition)。
2004年9月30日,JDK 1.5发布,工程代号Tiger(老虎)。从JDK 1.2以来,Java在语法层面上的变换一直很小,而JDK 1.5在Java语法易用性上做出了非常大的改进。例如,自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环(foreach循环)等语法特性都是在JDK 1.5中加入的。
2006年12月11日,JDK 1.6发布,工程代号Mustang(野马)。在这个版本中,Sun终结了从JDK 1.2开始已经有8年历史的J2EE、J2SE、J2ME的命名方式,启用Java SE 6、Java EE 6、Java ME 6的命名方式。
2011年7月28日,Oracle公司发布Java SE 1.7。由于金融危机影响,SUN公司被Oracle公司所收购,让开发者整整等了5年才迎来了1.7版本的发布。
- 2014年3月18日,Oracle公司发表Java SE 1.8
Java 的创造是为了完成 WORA(Write Once Run Anywhere 一次编写到处运行) 的理念,它的平台独立性,使得它必须构建一个基于操作系统之上的虚拟及其,Java虚拟机——JVM。也正由于JVM的存在,使它在企业应用中获得了巨大成功。
最开始对于基于JVM的语言来说,只存在Java,它是用于在JVM上编程的唯一选择。但是这个行业很早就满足不了对在JVM上面编程的更多和潜在的选择需求。在脚本领域首先出现了Jython,JVM的一种Python实现,还有Rhino和JavaScript的JVM引擎,它们出现在1997年,跟着就是2000年的BeanShell和2011年的JRuby,以及著名的Scala和Groovy。
Kotlin是由JetBrains在2011年JVM语言峰会上发布的语言,Kotlin是JVM家族中年纪最小的一位新成员。它从Groovy及Scala等前辈身上继承了不少优秀基因,同时还加入了一些别出心裁的原创要素。它的设计思路是提供同Java一样快捷的编译效果,并获得本地Java二进制内容的处理速度。这两大优势使其从头一个发布版起,就成为开发人员们解决编译及执行速度问题的首选JVM语言。
什么是Kotlin
Kotlin来自于著名的IDE IntelliJ IDEA(Android Studio基于此开发) 软件开发公司 JetBrains(位于东欧捷克)。Kotlin起源来自JetBrains的圣彼得堡团队,名称取自圣彼得堡附近的一个小岛(Kotlin Island),是一种基于JVM的静态类型编程语言。
2017年召开的Google IO大会上,Google将Kotlin语言取代JAVA作为Android开发的一级编程语言,这意味着Kotlin语言的优势,将能够率先在移动设备上发挥出它的优势,Google的大力支持也将为Kotlin的发展起到推动作用。
Kotlin由JetBrains公司开发一个基于JVM的新的编程语言,Kotlin正是为弥补Java那些缺憾而生的。它极大简化代码,使我们节省编写大量的样板代码工作,它的最大特点之一就是与Java 100%互通,并具备诸多Java尚不支持的新特性。Google称还将与JetBrains公司合作,为Kotlin设立一个非盈利基金会。Android Studio 3.0版本将全面的对Kotlin语言提供支持。
新旧对抗,Kotlin vs Java?
计算机语言是上一大分水岭就是高级程序语言的诞生,早期的汇编语言严重一依赖于硬件设备,学习门槛高、移植性极差、理解起来很困难、开发效率也很低下。为了让编程语言更贴近人类的真实思维模式,人们开发了高级语言,让整个程序代码变得可读、易用、稳定、可移植、开发高效。
除了极少数非常底层的领域直接使用汇编外,如今早已是高级程序语言的天下。程序员可以将自己的精力花在,创造设计与抽象高层次的事物上,而不是机器的翻译者。
Kotlin毫无疑问就是一门高级语言,它拥有高级语言的特性。Kotlin不仅继承了Java语言的优点,还拥有Groovy和Scala等语言的简洁和易用性。
Kotlin VS Java
Kotlin语言相比于Java语言,最主要的特点就是其的,优雅与简洁性。如,官方给出了一张关于Kotlin特性结构图:
- 简化了package引入的写法
- 将Array可以作为类型参数
- 每一行代码不在以“;”作为结束符,而是换为了回车
那么,kotlin的优势就只有这些吗?当然不是,下面我们主要介绍一下kotlin语言在使用上相比Java的几点便捷性。
Kotlin与Java混合编程
Kotlin完美解决了与Java直接相互调用的问题。意味着,你不用担心使用了Kotlin之后,无法再使用自己熟悉的框架库。
数据类,让代码更加简洁
在使用Java开发Android应用程序过程中,我们经常会遇到使用数据类。如
public class User {
private long id;
private String userName;
private String avatar;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", avatar='" + avatar + '\'' +
'}';
}
}
许多冗余的代码,无意义的getter、setter和toString。如果使用Kotlin呢?需要多少代码?
data class User (
var id: Long,
var userName: String,
var avatar: String
)
空安全,告别NullPointException
在Java开发的过程中遇到的最多的异常就是NullPointException(NPE),空异常的问题很多是不可预见的。一直以来,NullPointException空指针异常在开发中是最低级也最致命的问题。我们往往需要进行各种null的判断以试图去避免NPE的发生。Kotlin基于这个问题,提出了一个空安全的概念,即每个属性默认不可为null。
如,这里我们使用Java语言来获取一个字符串b的长度,我们通常这样写:
if (b != null && b.length > 0) {
System.out.print("字符串长度为:" + b.length);
} else {
System.out.print("空字符串");
}
如果我们使用kotlin语言,我们可以这样:
b?.length
扩展函数
可以为任何类添加新函数。在项目中,替代已有的典型实用程序类可使代码更具可读性。例如,为fragment添加新函数,用于显示toast:
fun Fragment.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT) {
Toast.makeText(getActivity(), message, duration).show()
}
定义好后,现在可以这样做:
fragment.toast("Hello world!")
Lambdas表达式
在写View事件的时候,我们通常会监听每一个View的操作,如OnClick、OnTouch等。在Java代码中,我们常会这么写:
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// do Something
}
});
没有意义而重复的OnClickListener每次都需要new一个,是不是感觉很累赘。如果,使用Kotlin的Lambda表达式,我们就可以这么写:
view.setOnClickListener({
// do Something
})
简化代码的插件
在Android的整体项目开发中,避免不了对一些视图数据做一些处理。通常,我们寻找将一个View都会调用系统的findViewById的方法。Java写法入下:
TextView textView = (TextView) findViewById(R.id.message);
textView.setText("Hello World");
而,如果我们使用了kotlin-android-extensions插件之后,我们就能够在Kotlin代码上更简化的书写此逻辑:
message.setText("Hello World")
Kotlin的特性远远不止上述这几点,这里,我们不再做过多的举例。书写的代码优雅、可读、简便,让开发者将自己的精力聚焦在应用的设计而不是代码本身,真正的将程序员从体力工作者转化成为脑力工作者。也许,在学完所有的Kotlin教程之后,你也能够面向传统累赘的开发语言,大声的说:“人生苦短,我用Kotlin”。
Hello World Kotlin
开始书写第一个基于Kotlin的Android项目吧。
安装Kotlin插件
Google官方在Android Studio 3.0版本已经全面的支持Kotlin语言了,我们可以在Android开发者网站
https://developer.android.com/studio/index.html 下载到Android Studio 3.0版本。如果你使用的Android Studio版本低于3.0或者使用的是其他JetBrains提供的IDE(如ItelliJ IDEA,https://www.jetbrains.com/idea/ ),那么你可以在 Settings->Plugins->Install JetBrains plugin中找到Kotlin语言插件。点击install安装,重启IDE,就可以使用Kotlin语言进行代码开发了。如下图所示:
创建一个基于Kotlin的Java项目
打开IntelliJ IDEA,点击Create New Project,创建一个新的项目。在选择项中,选择基于 Kotlin(JVM) 的项目创建。如下所示:
填写项目名称 Project name:,点击Next。
在src源码文件夹上右键,选择新建一个基于Kotlin语言的文件,New -> Kotlin File/Class。如,这里我们创建一个名叫Hello.kt的Kotlin文件。
暂时先不要管每一句的含义,编写如下所示的Hello World代码。
点击IntelliJ IDEA上的run按钮 。如果项目在创建上没有任何问题的话,将会在IntelliJ IDEA下方看到,如下所示的输出,第一个给予Kotlin的项目就创建成功。
创建一个基于Kotlin的Android项目
创建一个以Kotlin为语言的Android项目与使用Java语言创建Android项目类似,首先打开Android Studio,我们可以选择 Start a new Android Studio project 或者 File -> New project 来创建一个全新的Android项目。
勾选 Include Kotlin support 选项,此选项在Android Studio 3.0版本后才会有支持。填写Application name(应用名称),Company domain(机构域名),让后 Next。
选择一个本机上一个已经安装的Android SDK版本作为目标版本。
选择添加一个Activity,这个我们选择创建一个 Empty Activity。
填写Activity的名称,点击Finish就完成了一个Android项目的创建。
值得一提的是,对于目前,Android开发的默认语言还是Java,在于Android Studio 3.0版本之后,我们可以在创建Activity的时候,直接勾选创建Kotlin语言的Activity,直接将Activity的语言定义到Kotlin。
当然,如果你没有看到这个选择也没有关系。在项目创建完成之后,打开MainActivity.java 文件。使用Find Action工具,找到Convert Java File to Kotlin File命令,就可以快速的将Java语言文件转化到Kotlin语言文件。Find Action工具在Windows上快捷键为Ctrl + Shift + A,在Mac上,快捷键为⌘ + Shift + A。
转化后,就得到以Kotlin语言实现的Activity。
class MainActivity : AppCompatActivity() {
@Override
protected fun onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
转化完后,整个Kotlin项目就算完成了。如果你在创建项目的时候没有勾选Include Kotlin support,那么你还需要进行如下的操作。
首先,配置整个项目为Kotlin项目。我们可以再Tool -> Kotlin -> Configure Kotlin in Project中找到次选项:
选择Kotlin编译的版本,这里我们使用的是默认的1.1.2-4版本。选择All modules contraining Kotlin files点击OK就将整个项目配置完成。
在整个配置完成之后,我们刷新build.gradle文件,既可以看见 apply plugin:’kotlin-android’ 加入完成。
当然,我们在标准的依赖库中,也可以看到kotlin-gradle-plugin作为依赖加入。
完成所有步骤之后,刷新整个gradle的工程依赖,点击Sync Now。我们针对Android Kotlin项目的所有配置就都完成了。
编译构建运行该项目,看到设备上显示的 Hello World! 字样,我们的第一个Kotlin项目就算是正确搭建完成了。