从Android 7.0开始,谷歌使用的API从Oracle JDK切换到了open JDK,这对于谷歌来讲是一个艰难的决定。对于开发者来讲,却倍感兴奋,这意味着长期的官司问题也许就此结束,Android系统开发又能够回归到一个正常的轨道,持续给全球的安卓用户带来惊喜。程序员
从Android 7.0开始,谷歌使用的API从Oracle JDK切换到了open JDK,这对于谷歌来讲是一个艰难的决定。对于开发者来讲,却倍感兴奋,这意味着长期的官司问题也许就此结束,Android系统开发又能够回归到一个正常的轨道,持续给全球的安卓用户带来惊喜。编程
Kotlin语言有什么优点?闭包
Kotlin语言被赞誉为Android世界里的Swift.架构
简单来讲,能够这样归纳框架
使用Kotlin对Android开发者意味着什么?函数
使用Kotlin开发,对于安卓开发来讲,主要有下面几个有利的影响:工具
What is Kotlin学习
Kotlin语言是由JetBrains公司开发,其初衷用于快速生成JavaScript代码,而现在Kotlin已经支持Android开发,并提供了一系列的Android开发插件。因为JetBrains的自然优点(Android Studio就是在JetBrains公司开发的IDE上面添加了一些插件而成),Android Studio对Kotlin语言的支持也比较到位。开发工具
看一看Kotlin语言给咱们带来了什么。this
Null Safe
空指针异常的确是困扰Java程序员不少年的问题,Swift语言巧妙地解决了这个问题,Kotlin采用了同样的解决方案,只是语法形式不太同样。
咱们来和Java语言作一个简单的对比:
Java
- Room room = ...;
- if(null != room && null != room.window) {
- room.window.open();
- }
Kotlin
- val room: Room? = ...
- room?.window?.open()
从常识来讲,咱们知道,一个房间可能会有窗户,也可能没有窗户,若是没有窗户,调用open方法天然就会出现空指针异常。Java语言的处理方式是在调用该方法以前进行空值判断,而Kotlin语言则使用?操做符进行控制,意思就是,若是?前面的对象为空,则直接返回空值,后面的语句再也不执行。其有一个专业叫法: Optinal Value (可选值)
相对于Java语言,Kotlin语言的处理方式简单了许多,更重要的是:妈妈不再用担忧个人程序出现空指针异常了 -_-
细心的读者应该能够发现,Kotlin语言将分号也去掉了,这和Swift语言的处理方式也是一致的。
关于Optional Value的具体用法,后面我会专门用一个章节来给你们讲解,请期待后面个人Kotlin语言系列教程。
Function
在Kotlin语言中,类终于再也不是一等公民。Kotlin语言开始支持面向过程编程,Kotlin语言中能够声明全局函数,内联函数等,还支持函数嵌套,使用函数做为方法参数等操做。对于一些简单的操做,新建一个类去处理,的确有时候是一个让人头疼的问题,Kotlin语言终于让咱们摆脱了这一尴尬的现状。
来看一看函数声明的简单写法,也和Java语言作一个简单的对比
Java
- public Sting sayHello(String name) {
- return "Hello, " + name;
- }
Kotlin
- fun String sayHello(name: String?): String {
- return "Hello, $name"
- }
函数的写法有较大的不一样,Kotlin语法相似Swift语言的写法,每一个函数都必须使用fun关键字声明,参数类型在后,参数名称在前,对于Java语言开发的同窗能够须要一个短暂的适应过程。
一样地,我会在后面的文章中专门对Kotlin函数进行讲解
Lambdas
闭包应该是Java程序员很是期待的一个特性,并且幸运的是,Java8已经开始支持这一特性。两者很是类似,咱们来和Java8的闭包作一个简单的对比
Java8
- interface Sum {
- int add(int x,int y);
- }
- Sum sum = (x,y) -> x + y
Kotlin
- val sum: (Int,Int) -> Int = { x,y -> x + y }
能够看到,两者的语法很是相似,一样支持类型推导,支持简写;不一样的是,因为Java语言彻底面向对象的特性,闭包必须与接口一一对应,而Kotlin语言因为自然支持函数编程,能够不用声明对应接口,直接在参数中使用便可。
Extension
这是我最喜欢的一个特性,Kotlin语言支持对现有的类进行扩展。Java程序员应该会对这个特性比较陌生,这也是Swift语言的一个特性之一。所谓扩展,就是在不使用继承的状况下,对现有的类新增方法,属性等操做,扩展不会破坏现有的类方法,仅仅在使用的时候进行动态添加。应该记住一个原则: 扩展优于继承
而这个特性Java语言并不支持。
Kotlin
- fun MutableList<Int>.swap(index1: Int, index2: Int) {
- val tmp = this[index1] // 'this' corresponds to the list
- this[index1] = this[index2]
- this[index2] = tmp
- }
Data Class
在开发过程当中,咱们经常要不断写一些Model类,不断地使用开发工具生成set/get方法。Data Class就是为简化这个操做而生的,数据类会自动生成set/get方法,而不用显式生成set/get方法,看下面的简单用法:
Kotlin
- data class Person(var name: String?,var age: Int?)
仅仅使用这样一行代码就完成Model类的建立,Kotlin会自动帮咱们生成set/get方法,极大地简化了Model类的编写工做。不过,Java程序员也不用太羡慕,不少Java框架也能够实现这一点,好比Google推出的Auto Value框架等等
Operator Overloading
这个特性在Swift语言中也存在,在C++语言中也存在。这个特性是一把双刃剑,使用操做符重载能够简化使用,也会损失一些代码可读性。因此,在使用操做符重载的时候,请慎重考虑。
关于Kotlin语言的特性一时半会也说不完,下面咱们就一些比较重要的特性和Java语言作一个简单的对比:
语言特性 | Kotlin | Java |
---|---|---|
Null Safe | 支持 | Java8支持 |
全局函数 | 支持 | 不支持 |
Lambdas | 支持 | Java8支持 |
Extension | 支持 | 不支持 |
Data Class | 支持 | 不支持(须要依赖框架) |
Operator Overloading | 支持 | 不支持 |
Java语言彻底互通
你可能会担忧使用Kotlin语言以后,以前的Java代码怎么办。这个担忧是彻底多余的,JetBrains保证Kotlin和Java语言能够实现彻底地互相调用,Kotlin最终也会编译成Java字节码。
Kotlin语言优点
有网友统计,使用Kotlin语言大约能够减小30%的代码编写,同时也不用再担忧空指针异常,因为JetBrains的自然基因,Kotlin能够得到较好的维护、升级。最后,对于Oracle公司对Google的频繁诉讼,这也算是一个很好的还击。在Kotlin语言发布以后,国外已经有不少开发人员推出了大量好用的Kotlin框架,你能够不用重复创造轮子。同时,Kotlin语言能够和Java语言实现无缝链接,你还在等什么呢?
建议
对于Kotlin语言,大部分开发人员都对Kotlin语言抱有积极态度。我本人也很是推崇Kotlin语言,若是你熟悉相似Python,Ruby等脚本语言,亦或者熟悉Swift语言,Kotlin语言将是你不二的选择。而若是你已经厌倦了Java语言冗余繁杂的写法,Kotlin语言也很是值得一试,相信你也会像我同样爱上这门语言。
感兴趣的能够本身来个人Java架构群,能够获取免费的学习资料,群号:855801563 对Java技术,架构技术感兴趣的同窗,欢迎加群,一块儿学习,相互讨论。