
原文来自: Android Announces Support for Kotlin
今天,Android团队很高兴地宣布,我们正式增加对Kotlin编程语言的支持。Kotlin是一种精湛的设计,成熟的语言,我们相信会使Android开发更快更有趣。它已被几个主要开发商采用 —— Expedia,Flipboard,Pinterest,Square等 —— 为他们的生产应用程序。Kotlin也用Java编程语言表现出色;两种语言之间的毫不费力的互操作是在Kotlin的呼吁中占很大一部分。
Kotlin插件现在与Android Studio 3.0捆绑在一起,可立即下载。Kotlin是由JetBrains开发的,和创造IntelliJ是同一些人。所以对于IDE支持科Kotlin来说,并不奇怪。
除了IDE支持之外,我们还宣布与JetBrains进行合作,将Kotlin推向非盈利基础。 (Kotlin已经在Apache2下开源了)
对Kotlin说”你好”
任何使用Java编程语言的人都很熟悉Kotlin。
1 | package helloWorld |
乍一看,你会看到舒适的元素,如大括号,类,包,功能和方法。你会发现,虽然Kotlin是基于熟悉的概念,在这些模型上,它是独一无二的现代化,优雅和务实的。特别地是,Kotlin具有极高的表现力,最小的句法摩擦你的想法和你必须输入什么才能表达这些想法之间。如果在编写代码的时候,你问自己的问题,那就是为什么我必须…?你会很高兴地得知,在Kotlin,许多这些问题的答案是“你不要!”
例如,也许你已经问为什么要在实现一个简单的类时,要输入一堆getter和setter的样板,以及重写equals()、hashCode()和toString()。以下是Java编程语言的典型示例(为了简洁起见,用微小的字体)。
1 | public class Customer { |
在Kotlin中,你没必要键入任何一个,这一行相当于上面的整个类。
1 | data class Customer(var name: String, var email: String = "", |
历史与参考
Kotlin已经有了一段时间了,它在2011年被公布,第一个预览于2012年发布。Kotlin 1.0于2016年发布,从1.0开始前进,JetBrains致力于保持向前兼容性稳定的功能。
你可以在https://kotlinlang.org/找到优秀的培训材料和参考资料,Android团队发现Kotlin Koans教程作为开始编写Kotlin片段的一种快速方式是特别有用的。这些教程的范围从简单到崇高,因为材料从基础到更复杂的Kotlin成语。
为什么选择Kotlin?
为什么Android团队决定支持Kotlin?最重要的是,因为我们认为Kotlin是一种伟大的语言,将使Android应用程序更轻松,更愉快。
Kotlin也是现有Android生态系统的绝佳搭档,它与Java编程语言100%兼容。您可以根据需要将Kotlin添加到现有的代码库中,并在同一个项目中自由混合两种语言。从使用Java编程语言Just Works™编写的代码调用Kotlin代码。通过一些应用自动翻译的惯例,通过其他方向通常也不需要开发人员的努力(例如,为您创建的属性getter和setter等)。在几个Kotlin注释的帮助下,您还可以自定义如何执行翻译。
最后,许多开发人员告诉我们,他们喜欢Kotlin语言。 (我们许多Android团队的开发人员也一直在说类似的东西。)已经有一个热衷于Android的Kotlin开发人员社区,Android团队在公开活动中常常对Kotlin提出疑问。Android社区已经发言了,我们听了。
一次快速旅程
为了帮助您了解Kotlin周围的所有兴奋之处,这里是一次快速的、非常不完整的、特别吸引人的方面的Kotlin旅程:
可空
Kotlin编译器强制可以显式声明可以保存空值的变量 —— 因此在运行时不再有NullPointerExceptions!
1 | var neverNull: String = "something" |
命名参数和默认参数
我们都看到有太多参数的方法来跟踪。例如:
1 | fun orderPizza(size: Size, pepperoni: Boolean, mushrooms: Boolean, |
将其与使用命名参数和默认参数的类似方案进行比较:
1 | fun orderPizza(size: Size, |
除了帮助避免不幸的比萨结果之外,这更容易阅读。它还减少了您需要编写的重载功能的变体数量。
当声明
Kotlin具有允许匹配任意表达式的switch语句的变体。
1 | // Please don't put this in your app! |
智能铸造
在你刚刚测试它是该类的一个实例之后,为什么你必须在一个类上投下一些东西?在kotlin,你不必这样做了。
1 | if (obj is String) { |
这也概括为when语句:
1 | // Assume reasonable implementations of Cat and Dog |
扩展功能
Kotlin让您基本上将新方法重新定位到现有的类型上,如果像许多人一样,希望String类有一个toPigLatin方法。您现在可以自行添加它,而无需创建一个新的帮助器类来包装String或者在语言委员会中服务的麻烦:
1 | // The "String." prefix indicates that this method should |
解构定义
我们已经看到定义一个简单的数据类是多么容易:
1 | data class Order(val itemCode: String, val quantity: Int, |
使用这些类之一作为返回类型的函数非常接近于支持多个返回值:
1 | fun getOrder(...): Order { |
要得到所有的方法,您可以使用解构声明语法。以下语句接受Order对象,提取其三个属性,然后将它们分配给三个变量:what, howMany 和 howMuch 。
—— 所有礼貌的Kotlin编译器,这也为您推荐正确的类型。
1 | val (what, howMany, howMuch) = getOrder(...) |
Lambdas
Kotin对于lambdas具有非常简洁的语法,可以很容易地表达强大的功能编程范例。这是一个简单的例子,它使用lambda来测试集合中的所有内容都是String:
1 | fun allStrings(collection: Collection)= |
创建使用类似JSON的语法的构建器的能力也恰好是语法上有效的Kotlin。这个例子在这里进行了扩展的讨论:
1 | fun generatePage(withEmphasis : Boolean) { |
这里有几件有趣的事情。 首先,这显示了Kotlin的功能语法如何表达:在这个例子中,“html”,“head”,“body”等都只是用Kotlin编写的函数,而后面是大括号的东西是功能参数(这个 片段使用具有与HTML标签匹配的名称的函数来构建网页的表示,但当然,您可以使用此模式构建任何所需的任何名称的复杂数据结构。)第二个有趣的是“withEmphasis”条件。 这可能看起来像我们正在混合代码(if(withEmphasis)…)与数据(所有的HTML-esque标签),但是这里的“数据”实际上只是更多的代码,因为它只是真正的代码,这可以让你建立 复杂的数据结构使用声明式语法,同时还具有对Kotlin语言的全部功能的内联访问。
开始获取
如果您想开始使用Kotlin,您可以立即在线开始使用代码。只需打绿色三角形即可编译并运行。
要在您的应用程序中尝试Kotlin,请按照下列步骤操作:
- 1、下载Android Studio 3.0
- 2、打开一个已存在的”.java”文件
- 3、调用”Code > Convert Java File to Kotlin File”
然后,IDE将引导您将Kotlin依赖项添加到项目中,然后将代码转换为功能相当的Kotlin代码。(如果适用于更为惯用的Kotlin,IDE将会将所有的调用站点提供给转换的类,例如当静态方法被移动到配对对象时)。
您还可以在developer.android.com上找到更多有关如何开始使用Kotlin的信息。
以上内容根据原文使用Google Translate工具翻译而成