与Java无缝兼容,Kotlin语言的优缺点及建议

从Android 7.0开始,谷歌使用的API从Oracle JDK切换到了open JDK,这对于谷歌来讲是一个艰难的决定。对于开发者来讲,却倍感兴奋,这意味着长期的官司问题也许就此结束,Android系统开发又能够回归到一个正常的轨道,持续给全球的安卓用户带来惊喜。程序员

从Android 7.0开始,谷歌使用的API从Oracle JDK切换到了open JDK,这对于谷歌来讲是一个艰难的决定。对于开发者来讲,却倍感兴奋,这意味着长期的官司问题也许就此结束,Android系统开发又能够回归到一个正常的轨道,持续给全球的安卓用户带来惊喜。编程

Kotlin语言有什么优点?闭包

Kotlin语言被赞誉为Android世界里的Swift.架构

简单来讲,能够这样归纳框架

  •  彻底兼容Java
  •  Null safe
  •  支持lambda表达式(比Java8更好)
  •  支持扩展
  •  体验一致的开发工具链

使用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

  1. Room room = ...;  
  2. if(null != room && null != room.window) {  
  3.      room.window.open();  

Kotlin

  1. val room: Room? = ...  
  2. room?.window?.open() 

从常识来讲,咱们知道,一个房间可能会有窗户,也可能没有窗户,若是没有窗户,调用open方法天然就会出现空指针异常。Java语言的处理方式是在调用该方法以前进行空值判断,而Kotlin语言则使用?操做符进行控制,意思就是,若是?前面的对象为空,则直接返回空值,后面的语句再也不执行。其有一个专业叫法: Optinal Value (可选值)

相对于Java语言,Kotlin语言的处理方式简单了许多,更重要的是:妈妈不再用担忧个人程序出现空指针异常了 -_-

细心的读者应该能够发现,Kotlin语言将分号也去掉了,这和Swift语言的处理方式也是一致的。

关于Optional Value的具体用法,后面我会专门用一个章节来给你们讲解,请期待后面个人Kotlin语言系列教程。

Function

在Kotlin语言中,类终于再也不是一等公民。Kotlin语言开始支持面向过程编程,Kotlin语言中能够声明全局函数,内联函数等,还支持函数嵌套,使用函数做为方法参数等操做。对于一些简单的操做,新建一个类去处理,的确有时候是一个让人头疼的问题,Kotlin语言终于让咱们摆脱了这一尴尬的现状。

来看一看函数声明的简单写法,也和Java语言作一个简单的对比

Java

  1. public Sting sayHello(String name) {  
  2.    return "Hello, " + name;  

Kotlin

  1. fun String sayHello(name: String?): String {  
  2.    return "Hello, $name"  

函数的写法有较大的不一样,Kotlin语法相似Swift语言的写法,每一个函数都必须使用fun关键字声明,参数类型在后,参数名称在前,对于Java语言开发的同窗能够须要一个短暂的适应过程。

一样地,我会在后面的文章中专门对Kotlin函数进行讲解

Lambdas

闭包应该是Java程序员很是期待的一个特性,并且幸运的是,Java8已经开始支持这一特性。两者很是类似,咱们来和Java8的闭包作一个简单的对比

Java8

  1. interface Sum {  
  2.     int add(int x,int y);  
  3. }  
  4. Sum sum = (x,y) -> x + y 

Kotlin

  1. val sum: (Int,Int) -> Int = { x,y -> x + y } 

能够看到,两者的语法很是相似,一样支持类型推导,支持简写;不一样的是,因为Java语言彻底面向对象的特性,闭包必须与接口一一对应,而Kotlin语言因为自然支持函数编程,能够不用声明对应接口,直接在参数中使用便可。

Extension

这是我最喜欢的一个特性,Kotlin语言支持对现有的类进行扩展。Java程序员应该会对这个特性比较陌生,这也是Swift语言的一个特性之一。所谓扩展,就是在不使用继承的状况下,对现有的类新增方法,属性等操做,扩展不会破坏现有的类方法,仅仅在使用的时候进行动态添加。应该记住一个原则: 扩展优于继承

而这个特性Java语言并不支持。

Kotlin

  1. fun MutableList<Int>.swap(index1: Int, index2: Int) {  
  2.       val tmp = this[index1] // 'this' corresponds to the list  
  3.       this[index1] = this[index2]  
  4.       this[index2] = tmp  

Data Class

在开发过程当中,咱们经常要不断写一些Model类,不断地使用开发工具生成set/get方法。Data Class就是为简化这个操做而生的,数据类会自动生成set/get方法,而不用显式生成set/get方法,看下面的简单用法:

Kotlin

  1. 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技术,架构技术感兴趣的同窗,欢迎加群,一块儿学习,相互讨论。

相关文章
相关标签/搜索