Android 的Swift-->Kotlin

来源:互联网 发布:人工智能的理论意义 编辑:程序博客网 时间:2024/04/28 07:41

转至:http://www.infoq.com/cn/news/2015/06/Android-JVM-JetBrains-Kotlin


Kotlin:Android世界的Swift

作者 谢丽 发布于 2015年6月25日 | 注意:QCon全球软件开发大会(北京)2016年4月21-23日,了解更多详情!讨论
  • 分享到:微博微信FacebookTwitter有道云笔记邮件分享
  • 稍后阅读
  • 我的阅读清单

Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源。与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、操作符重载、字符串模板。它与Java高度可互操作,可以同时用在一个项目中。

按照JetBrains的说法,根据他们多年的Java平台开发经验,他们认为Java编程语言有一定的局限性和问题,而且由于需要向后兼容,它们不可能或很难得到解决。因此,他们创建了Kotlin项目,主要目标是:

  • 创建一种兼容Java的语言
  • 编译速度至少同Java一样快
  • 比Java更安全
  • 比Java更简洁
  • 比最成熟的竞争者Scala还简单

Ashraff Hathibelagal是一名喜欢研究新框架和SDK的独立开发者。近日,他撰文介绍了Kotlin的一些语法。按照他的说法,一个合格的Java程序员可以在很短的时间内学会使用Kotlin。

类与构造函数

Kotlin创建类的方式与Java类似,比如下面的代码创建了一个有三个属性的Person类:

class Person{    var name: String = ""    var age: Int = 0    var college: String? = null}

可以看到,Kotlin的变量声明方式略有些不同。在Kotline中,声明变量必须使用关键字var,而如果要创建一个只读/只赋值一次的变量,则需要使用val代替它。另外,为了实现“空安全(null safety)”,Kotlin对可以为空的变量和不可以为空的变量作了区分。在上述代码中,变量nameage不可为空,而表明变量college可以为空。定义完类之后,创建实例就非常简单了:

var jake = Person()

注意,Kotlin没有关键字new。实例创建完成后,就可以像在Java中一样为变量赋值了:

jake.name = "Jake Hill"jake.age = 24jake.college = "Stephen's College"

变量可以采用上述方式赋值,也可以通过构造函数赋值,但后者是一种更好的编码实践。在Kotlin中,创建这样的一个构造函数非常简单:

class Person(var name: String, var age: Int, var college: String?) {}

而实际上,由于构造函数中没有其它操作,所以花括号也可以省略,代码变得相当简洁:

class Person(var name: String, var age: Int, var college: String?)var jake = Person("Jake Hill", 24, "Stephen's College")

上述代码中的构造函数是类头的一部分,称为主构造函数。在Kotlin中,还可以使用constructor关键字创建辅助构造函数,例如,下面的代码增加了一个辅助构造函数初始化变量email

class Person(var name: String, var age: Int, var college: String?) {    var email: String = ""    constructor(name:String, age:Int, college: String?, email: String) : this(name, age, college) {        this.email = email    }}

Kotlin允许创建派生类,但要遵循如下规则:

  • 必须使用代替Java中的extends关键字
  • 基类头必须有open注解
  • 基类必须有一个带参数的构造函数,派生类要在它自己的头中初始化那些参数

比如下面的代码创建了一个名为Empoyee的派生类:

open class Person(var name: String, var age: Int, var college: String?) {    ...}class Employee(name: String, age: Int, college: String?, var company: String) : Person(name, age, college) {}

函数与扩展

有派生就有重载。与类的派生一样,允许重载的方法要有open注解,而在派生类中重载时要使用override注解。例如,下面是在Employee类中重载Person类的isEligibleToVote方法的代码:

override fun isEligibleToVote(): Boolean {    return true}

除了改变类的已有行为,Kotlin还允许开发者在不修改类的原始定义的情况下实现对类的扩展,如下面的代码为Person类增加了一个名为isTeenager的扩展:

fun Person.isTeenager(): Boolean {    return age in 13..19}

在需要扩展来自其它项目的类时,这个特性特别有用。

上面提到的函数都与Java中的函数类似,但Kotlin还支持其它类型的函数。如果一个函数返回单个表达式的值,那么可以使用=来定义函数。下面是一个创建单表达式函数的例子:

fun isOctogenarian(): Boolean = age in 80 .. 89

Kotlin还支持高阶函数和Lambda表达式。例如,lambda表达式{x,y->x+y}可以像下面这样给一个变量赋值:

val sumLambda: (Int, Int) -> Int = {x,y -> x+y}

而下面的高阶函数将上述表达式作为一个参数,并将表达式的计算结果翻倍:

fun doubleTheResult(x:Int, y:Int, f:(Int, Int)->Int): Int {    return f(x,y) * 2}

该函数可以使用下面的其中一种方式调用:

val result1 = doubleTheResult(3, 4, sumLambda)

val result2 = doubleTheResult(3, 4, {x,y -> x+y})

范围表达式

在Kotlin中,范围表达式用的比较多。范围创建只需要..操作符,例如:

val r1 = 1..5//该范围包含数值1,2,3,4,5

如果创建一个降序范围,则需要使用downTo函数,例如:

val r2 = 5 downTo 1//该范围包含数值5,4,3,2,1

如果步长不是1,则需要使用step函数,例如:

val r3 = 5 downTo 1 step 2//该范围包含数值5,3,1

条件结构

在Kotlin中,if是一个表达式,根据条件是否满足返回不同的值,例如,下面的代码将isEligibleToVote设置为“Yes”

var age = 20val isEligibleToVote = if(age > 18) "Yes" else "No"

when表达式相当于Java的switch,但功能更强大,例如,下面的代码将typeOfPerson设置为“Teenager”:

val age = 17val typeOfPerson = when(age){    0 -> "New born"    in 1..12 -> "Child"    in 13..19 -> "Teenager"    else -> "Adult"}

循环结构

Kotlin使用for..in遍历数组、集合及其它提供了迭代器的数据结构,语法同Java几乎完全相同,只是用in操作符取代了:操作符,例如,下面的代码将遍历一个String对象数组:

val names = arrayOf("Jake", "Jill", "Ashley", "Bill")for (name in names) {    println(name)}

whiledo..while循环的语法与Java完全相同。

字符串模板

Kotlin允许在字符串中嵌入变量和表达式,例如:

val name = "Bob"println("My name is ${name}") //打印"My name is Bob"val a = 10val b = 20println("The sum is ${a+b}") //打印"The sum is 30"

此外,Kotlin与Java高度可互操作。Kotlin可以用一种自然的方式调用现有的Java代码,而Java也很容易调用Kotlin代码。同时,Kotlin也可以与JavaScript互操作。

上面介绍的只是Kotlin的一些基本语法和特性,更多细节请查阅官方文档。事实上,到目前为止,Kotlin还仍然只是一个预览版本,接下来的几个月中还会有多项重大改进及新增特性。尽管如此,GitHub上已有400多个与Kotlin项目相关的库。

在另外一篇文章中,Hathibelagal写道,“如果你正在为Android开发寻找一种替代编程语言,那么应该试下Kotlin。它很容易在Android项目中替代Java或者同Java一起使用。”想要了解如何在Android Studio中使用Kotlin开发Android项目的读者,可以读下这篇文章。


感谢徐川对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群InfoQ好读者)。

【ArchSummit深圳2016】15大精彩专题,20位大咖讲师,驭势科技联合创始人CEO吴甘沙、Twitter机器学习基础设施组技术负责人郭晓江、腾讯平台技术运营总监徐勇州、石墨文档创始人吴洁..各大技术大咖齐聚ArchSummit,最精彩的技术切磋从这开始,八折门票倒计时,详情请点击这里。



转至:http://www.mamicode.com/info-detail-936729.html

使用Kotlin开发Android

时间:2015-07-23 12:17:45      阅读:8699      评论:0      收藏:0      [点我收藏+]

标签:android   张涛   kotlin   

查看我的全部开源项目【开源实验室】
欢迎加入我的QQ群:【201055521】,本博客客户端源码下载【请点击】

摘要

我首先声明我并没有使用Kotlin很长时间,我几乎是在学习的同时写了这些文章的。我并没有尝试任何其它的替 代语言,例如Go和Scala,所以如果你是真的考虑换一种开发语言的话,我建议你去搜索一下其他人对这些 语言的评价。
本文原创,转载请注明地址:http://blog.kymjs.com/

正文

最近,新了解了一门编程语言,叫做Kotlin。Kotlin是Jetbrains公司起初用于内部开发的而发起的一个开源项目,这个Jetbrains公司也许你没听过,但是IntelliJ IDEA你一定听过,没错你所用的Android Studio的老妈就是这个公司的产品。Kotlin是基于JVM的,要介绍Kotlin的原因是因为它与Java具有很高的互通性和IDE对其良好的支持,还有当然也是最重要的,它相对于java作为语言本身的优越性。

为什么使用Kotlin

如果一门编程语言不足以改变你的编程思维,那么它是失败的。我们已经熟练了C、Obj-C、JAVA等静态语言,是时候学习一下Swift、Go、Kotlin这种动态语言了。
第二个原因,Kotlin确实能省略许多的代码编写,以及它特有的语言特性。
第三个原因,与Sala、Go等相比,Kotlin能够完美兼容现有的Java代码,也就是说,像我们平时使用的Volley、KJFrameForAndroid、OKHttp等开发框架,在Kotlin语言下依旧能正常运行。

IDE选择

依旧是我的风格,实践为主,这篇文章就首先为大家讲解用Kotlin开发一个Android应用的Hello World。
首先是IDE,Kotlin也支持使用Eclipse开发,虽然我是Eclipse脑残粉,但是这里我不讲,原因你懂的,Eclipse老了。这里为大家讲解在AndroidStudio中使用Kotlin开发Android应用。

开发环境配置

1、启动AndroidStudio,command+,打开Preference(windows下请自行查找相应快捷键),搜索plugin,打开插件界面,点击BrowseRepository,搜索Kotlin,双击安装Kotlin和Kotlin Extension For Android。第一个是Kotlin语言支持包,第二个是我们稍后会用到的特性的增强包。
技术分享
技术分享
如果你由于墙的原因无法下载,在我新版博客主页(http://kymjs.com/)下方有第一个插件的离线包。
2、有了语言支持包,我们就可以新建一个Android工程了。新建好一个普通Android工程后,点击Code->Convert Java File to Kotlin File。默认的快捷键有点冗长,这里我直接将快捷键设置成command+5,以后转换起来就方便很多了。
技术分享
转换好以后我们会发现我们原本的java类起了一些变化,观察文件的扩展名,可以看到已经从.java变成了.kt文件。
3、点击Tool->Kotlin->Configure Kotlin in Project
(这里顺带说一下,网上很多教程都是源自这四篇文章的翻译,说需要手动配置build.gradle,只是这四篇文章是很早以前的了,现在开发Kotlin早就可以用AS一键配置了)我们选择最新的0.12.613版本(也许你会在网上看到很多Kotlin M12,M11等名词,那就是指这里的0.12类似于Android17,Android22,Java8,这样的版本称呼)
技术分享
4、点击确定,接下来是一段漫长的等待,AndroidStudio正在下载相关配置(能翻墙的建议翻墙),下载完成以后,我们就可以运行这个Android应用了。

以上就是Kotlin For Android的HelloWorld,下一篇我们讲解Kotlin的基本语法以及开发中的奇淫技巧。

版权声明:本文为博主原创文章,未经博主允许不得转载。

使用Kotlin开发Android

标签:android   张涛   kotlin   



0 0