对Android的最新支持为快速发展的Kotlin语言提供了额外的动力,同时我们也在密切关注Kotlin/Native(基于LLVM,Kotlin代码可以是编译为本机可执行文件)。在使用Anko库开发Android应用的时候,我们尝到了空指针安全、数据类和DSL轻松构建的甜头。尽管初始编译速度较慢且仅在IntelliJ中提供最好的IDE支持,但我们仍然建议尝试使用这种清新干净的现代语言。由于最近有机会在一个客户项目中使用到今年流行的语言Kotlin,所以在不同的场合都被要求分享一些Kotlin相关的资料。在这个过程中被问得最多的一个问题是——为什么要尝试Kotlin?(图片来自:http://suo.im/4hXHdp)其实早在去年年初,客户就已经完成了后端技术选型,Kotlin已经成为项目的主要语言构建后端微服务。所以在这些分享中,我并没有给出很好的答案,问题本身就引发了我的思考。首先我们来看一下Kotlin语言的特点。官方列表有4个显着特点:ConciseConsiceSafeSafeFriendly开发工具Tool-friendlyInteroperablewithJavaInteroperableConciseConciseKotlin的简单性体现在很多方面。对于Java程序员来说,最直接的表现就是在Kotlin语法中直接省略了分号,在构造类的实例时省略了new关键字。下面是一段标准的Kotlin代码:funsayHi(name:String):String{valsb=StringBuilder(str="Hi")sb.append(name)returnsb.toString()}我们再看一个Kotlin官网的示例代码来体验Kotlin的简单性:dataclassCustomer(valname:String,valemail:String,valcompany:String)一行简单的代码实现了一个Pojo,其中包括构造函数和默认getter、toString、equals、hashCode和复制实现,而同样的java实现需要大约50行代码,即使借助Lombok也需要十几行代码。Kotlin也是在Java集合类的基础上进行了封装,提供了非常丰富的集合操作。同时结合非常简洁的Lambda表达式,让调用更加精简。valnumbers=1..10valdoubles=numbers.map{it*2}valsumOfSquares=doubles.fold(0){x,y->x+y}除了这些,Kotlin还提供了很多类似的字符串模板,标准函数库,运算符重载的特点使得代码非常简洁易读,大大提升了开发者的体验。从实际项目来看,Kotlin的简洁性在代码量上是非常明显的。对于一个提供24个API的SpringBoot微服务,用Kotlin编写的代码量大约8000行(包括测试代码)。同样规模的微服务用Java编写时,代码量会远大于这个数字。许多编程语言(包括Java)中最常见的陷阱之一是访问空指针,导致空指针异常。Kotlin的安全性主要体现在对Null-Safety的支持上。它可以让代码在编译过程中意识到可能的NullPointerException,从而使Java开发人员可以轻松摆脱NullPointerException。varoutput:Stringoutput=null//Compilationerrorvalname:String?=null//Nullabletypeprintln(name.length())//Compilationerror同时,Kotlin也提供了一些自动转换和类型推断的特性,这也带来了安全检查的方便。下面也是官网的样例。类型检查为真后,Kotlin自动完成Any到Invoice类型的转换:funcalculateTotal(obj:Any){if(objisInvoice)obj.calculateTotal()}友好的开发工具Tool-友好的功能不用说了,原来官方网站的引述是“这是我们最擅长的!”和Java的互操作性。简单来说,这个特性就是Kotlin和Java可以互相调用。这意味着我们可以使用任何现有的Java库来构建我们的应用程序,让我们可以享受Kotlin带来的愉快的编程体验,而无需放弃我们熟悉的一切。...importorg.springframework.data.jpa.repository.JpaRepositoryimportorg.springframework.data.jpa.repository.JpaSpecificationExecutor...interfaceAreaRepository:JpaRepository
