就在昨天,Android领域的Swift--Kotlin 1.0发布了,详细的新版本发布介绍请「阅读原文」查看官方发行说明。

下图是该项目在 Github 的发展数据:

何为Kotlin?


Kotlin 是一门实用的编程语言,可用于 JVM 和 Android 程序开发,Kotlin 结合了面向对象和函数式特性,致力于互操作性,安全,简洁和工具支持。

Kotlin 是一门通用的语言,只要能用 Java 的地方就能用 Kotlin,包含:服务器程序开发,移动应用开发(Android),桌面客户端程序开发。 Kotlin 支持所有主要的开发工具以及服务,比如:

  • IntelliJ IDEA,Android Studio 和 Eclipse

  • Maven, Gradle 和Ant

  • Spring Boot(Kotlin 支持今天正式发布!)

  • GitHub,Slack,甚至 Minecraft

Kotlin 的主要特点之一是Java+Kotlin 混合工程的互操作性以及无缝兼容,使引入Kotlin的过程简单容易,并达成更少的重复性代码(boilerplate code)和更佳的类型安全(type-safety)。

Kotlin 还有一个扩展标准库(extensive standard library)能让日常工作变得简单顺畅,它能帮助保持低内存占用 (bytecode footprint)。当然,Kotlin 中自然可以使用 Java 库,反之亦然。

为何说Kotlin非常适合于Android?

基本上,这是因为Kotlin的所有特性都非常适合于Android生态圈。Kotlin的库非常小,我们在开发过程中不会引入额外的成本。其大小 相当于support-v4库,我们在很多项目中所使用的库都比Kotlin大。除此之外,Android Studio(官方的Android IDE)是基于IntelliJ构建的。这意味着我们的IDE对该语言提供了非常棒的支持。我们可以很快就配置好项目,并且使用熟悉的IDE进行开发。我 们可以继续使用Gradle以及IDE所提供的各种运行与调试特性。这与使用Java开发应用别无二致。归功于互操作性,我们可以在Kotlin代码中使 用Android SDK而不会遇到任何问题。实际上,部分SDK使用起来会变得更加简单,这是因为互操作性是非常智能的,比如说它可以将getters与setters映 射到Kotlin属性上,我们也可以以闭包的形式编写监听器。

如何在Android开发中使用Kotlin?

过程非常简单,只需按照下面的步骤来即可:

  • 从IDE plugins中下载Kotlin插件

  • 在模块中创建Kotlin类

  • 使用“Configure Kotlin in Project…”

  • 开始编码

Kotlin的一些特性


Kotlin拥有大量非常打动人心的特性,这里无法一一进行介绍,不过我们来看一下其中最为重要的一些。

  • Null安全

如前所述,Kotlin是null安全的。如果一个类型可能为null,那么我们就需要在类型后面加上一个?。这样,每次在使用该类型的变量时,我们都需要进行null检查。比如说,如下代码将无法编译通过:

var artist: Artist? = null?

artist.print()

第2行会显示一个错误,因为没有对变量进行null检查。我们可以这样做:

if (artist != null) {

?    artist.print()?

}

这展示了Kotlin另一个出色的特性:智能类型转换。如果检查了变量的类型,那就无需在检查作用域中对其进行类型转换。这样,我们现在就可以在 if中将artist作为Artist类型的变量了。这对于其他检查也是适用的。还有一种更简单的方式来检查null,即在调用对象的函数前使用?。甚至 还可以通过Elvis运算符?提供另外一种做法:

val name = artist?.name ?: ""

  • 数据类

在Java中,如果想要创建数据类或是POJO类(只保存了一些状态的类),我们需要创建一个拥有大量字段、getters与setters的类,也许还要提供toString与equals方法:

public class Artist {

private long id;

private String name;

private String url;

private String mbid;

public long getId() {

return id;

}

public void setId(long id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getUrl() {

return url;

}

public void setUrl(String url) {

this.url = url;

}

public String getMbid() {

return mbid;

}

public void setMbid(String mbid) {

this.mbid = mbid;

}

@Override

public String toString() {

return "Artist{" +

"id=" + id +

", name='" + name + '\'' +

", url='" + url + '\'' +

", mbid='" + mbid + '\'' +

'}';

}

}

在Kotlin中,上述代码可以写成下面这样:

data class Artist (?

var id: Long,

var name: String,

var url: String,

var mbid: String)

Kotlin使用属性而非字段。基本上,属性就是字段加上其getter与setter。

  • 互操作

Kotlin提供了一些非常棒的互操作特性,这对于Android开发帮助非常大。其中之一就是拥有单个方法的接口与lambda表达式之间的映射。这样,下面这个单击监听器:

view.setOnClickListener(object : View.OnClickListener {

override fun onClick(v: View) {

toast("Click")?

}

?})

可以写成这样:

view.setOnClickListener { toast("Click") }

此外,getters与setters都会自动映射到属性上。这并不会造成性能上的损失,因为字节码实际上只是调用原来的getters与setters。如下代码所示:

supportActionBar.title = title

textView.text = title

contactsList.adapter = ContactsAdapter()

  • Lambda表达式

Lambda表达式会在极大程度上精简代码,不过重要的是借助于Lambda表达式,我们可以做到之前无法实现或是实现起来非常麻烦的事情。借助于 Lambda表达式,我们可以以一种更加函数式的方式来思考问题。Lambda表达式其实就是一种指定类型,并且该类型定义了一个函数的方式。比如说,我 们可以像下面这样定义一个变量:

val listener: (View) -> Boolean

该变量可以声明一个函数,它接收一个view并返回这个函数。我们需要通过闭包的方式来定义函数的行为:

val listener = { view: View -> view is TextView }

上面这个函数会接收一个View,如果该view是TextView的实例,那么它就会返回true。由于编译器可以推断出类型,因此我们无需指定。还可以更加明确一些:

val listener: (View) -> Boolean = { view -> view is TextView }

借助于Lambda表达式,我们可以抛弃回调接口的使用。只需设置希望后面会被调用的函数即可:

fun asyncOperation(value: Int, callback: (Boolean) -> Unit) {

...

callback(true)?

}

asyncOperation(5) { result -> println("result: $result") }

还有一种更加简洁的方式,如果函数只接收一个参数,那就可以使用保留字it:

asyncOperation(5) { println("result: $it") }

  • Anko

Anko是Kotlin团队开发的一个库,旨在简化Android开发。其主要目标在于提供一个DSL,使用Kotlin代码来声明视图:

verticalLayout {

val name = editText()

button("Say Hello") {

onClick { toast("Hello, ${name.text}!") }

}

}

它还提供了其他一些很有用的特性。比如说,导航到其他Activity:

startActivity("id" to res.id, "name" to res.name)

总结


如你所见,Kotlin在很多方面都简化了Android的开发工作。它会提升你的生产力,并且可以通过非常不同且更加简单的方式来解决一些常见的问题,你开始学习了么?

参考资料:

1. http://www.infoq.com/cn/news/2016/01/kotlin-android?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global

2. http://www.oschina.net/news/70734/kotlin-1-0-final

「阅读原文」查看官方新版本发布介绍。


觉得不错,可以长按订阅

Kotlin 1.0 正式版发布啦相关推荐

  1. StartOS 5.0 正式版发布

    StartOS 5.0正式版发布了. StartOS -- 是由东莞瓦力网络科技有限公司发行的开源操作系统,符合国人的使用习惯,预装常用的精品软件,操作系统具有运行速度快,安全稳定,界面美观,操作简洁 ...

  2. 服务器安全股v4.0正式版发布 防火墙效能更强

    2019独角兽企业重金招聘Python工程师标准>>> 6月24日,服务器安全狗v4.0正式版发布. 超强驱动,全线优化 服务器安全狗全方位兼容驱动V2.0震撼上线,由内而外全面提高 ...

  3. Xcode 7.0正式版发布了

    Xcode 7.0正式版发布了 下载地址:链接: http://pan.baidu.com/s/1FNkPS 密码: ee42 本文由大学霸整理,转载请注明出处,尊重IT人!

  4. Wonder 1.0 正式版发布,WebGL 3D引擎和编辑器

    介绍 Wonder 1.0正式版发布了.免费.开源,不用注册,直接打开在线编辑器即可使用. Wonder 是 web 端 3D 开发的解决方案,包括引擎.编辑器,致力于打造开放.分享.互助的生态.Wo ...

  5. java 7 发布,【UC浏览器】Java平台7.0正式版发布啦

    [UC浏览器]Java平台7.0正式版发布啦 UC浏览器是UC 优视科技开发的一款手机浏览器,支持WEB.WAP页面浏览,速度快而稳定,页面排版美观:具有网站导航.搜索.下载.个人数据管理等功能,您能 ...

  6. vue 3.0 正式版_Vuejs 3 Release:One Piece. Vuejs 3.0 正式版发布!代号:海贼王

    Vuejs 3.0 在北京时间2020年9月19日凌晨,终于发布了 3.0 版本,代号:One Piece.此次vue3.0 为用户提供了全新的 composition-api 以及更小的包大小,和更 ...

  7. Redis 5.0 正式版发布了,19 个新特性

    转载自  Redis 5.0 正式版发布了,19 个新特性 Redis 5.0 GA 正式版发布了! 下载地址: download.redis.io/releases/redis-5.0.0.tar. ...

  8. GAE 博客——B3log Solo 0.3.0 正式版发布了!

    GAE 博客 -- B3LOG Solo 0.3.0 正式版发布了!该版本重写了后台管理,对前台模版进行了调整优化,修复了一些 Bugs,并进行了一些改进以及新特性. 另外,0.3.0 加入了插件功能 ...

  9. 路过秋天版博客 V2.0 正式版发布 增加后台管理系统[支持多语言、多用户、多数据库、目录级URL]...

    路过秋天版博客发布历史回顾: 1:2010年11月08日---支持多语言.多用户.多数据库.目录级URL之路过秋天版博客发布[绝对有杀伤力的博客] 2:2010年11月10日---基础却容易被忽略的那 ...

  10. AdmExpress 国际仓储转运系统/海淘转运系统 1.0 正式版发布

    2019独角兽企业重金招聘Python工程师标准>>> AdmExpress1.0正式版发布  AdmExpress是一款国际仓储转运系统,基于最新的ThinkPHP3.2版本开发, ...

最新文章

  1. 在Flex控件中使用XMLListCollection
  2. 青年PM倪超:想让程序员多一点点幸福感
  3. CSS background 属性
  4. 20-21-2网络管理quiz1
  5. PHP表格下框线怎么设置虚线,html中p怎么设置虚线边框
  6. java读取mysql配置文件_MySql主从复制,从原理到实践
  7. cast函数 oracle 日期_从 Oracle 到 PostgreSQL ,某保险公司迁移实践
  8. 电脑内录软件如何录制电脑系统在线声音?
  9. Socket发送缓冲区接收缓冲区快问快答
  10. 区块链技术视频资料下载(不断更新中)
  11. qq邮箱foxmail imap服务器,开通IMAP服务 用Foxmail远程遥控QQ邮箱
  12. Spring 整合Hibernate 开发实例
  13. 极速接入港交所OMD-C 港股L2数据,JAR WebSocket API获取数据
  14. 火焰课堂java_通过火焰图引入Java剖析
  15. html星座代码,各星座详细页面.html
  16. BSGSexBSGS(让你轻松理解和掌握)
  17. zjs-my-dary-20220113
  18. STM32HAL库-移植mbedtls开源库示例(一)
  19. 树莓派安装RTL-SDR驱动(编译安装)
  20. win下如何用cmd转换记事本的编码格式

热门文章

  1. 自己编写的新闻显示控件(列表显示不过不够完善还需努力)
  2. hdu 4325 Flowers 离散化+线段树 多校联合赛(三) 第六题
  3. 在 Mac 上的 Keynote 讲演中如何更改共享演示文稿的设置?
  4. iOS开发之获取LaunchImage启动图
  5. Mac电脑硬件温度控制:TG Pro
  6. MacBook 键盘出现故障,如何修复?
  7. Mac访达搜索找不到对应文件的解决方法
  8. mac详细的系统信息怎么查看?
  9. SQLServer之删除用户自定义数据库用户
  10. python:关于读取文件的指定行的问题