Kotlin 来了,Google 近日表示官方支持 Kotlin 作为 Android 的开发语言,引来了不少目光。我们在评估 Appetizer 质量监控对 Kotlin APP 的支持情况的同时,和大家交流一下 Kotlin 对现有测试体系的影响。欢迎大家一起交流,如果有已经用上 Kotlin 开发的童鞋非常欢迎来拿 Appetizer 试试。

Kotlin 历史

Kotlin 并不年轻,JetBrains 公司早在 2011 年七月就宣布了 Kotlin 项目。JetBtrains是捷克一家出产 IDE 的公司,比较著名的产品有 IntelliJ, WebStorm, PyCharm, CLion 等,Google 在抛弃了 Eclipse 搞出的 Android Studio,就是基于 IntelliJ 开发的。JetBrains 的产品基本涵盖了市面上主要的编程语言,一般是免费版和收费增强版,对高校学生也是非常好的。有兴趣的可以去看一下他们的产品,Appetizer 团队还是很喜欢他们的 IDE 的。

2012 年 2 月,Kotlin 开源。知道 2016 年 2 月,Kotlin 第一个稳定版本 1.0 发布。

当然 2017 年 Google IO 上宣布 Kotlin 作为 Android 的一级开发语言

值得注意的还有,2013 年的 Google IO 宣布了 Android Studio,也就是说 Google 和 JetBrains 有一定年头了。但是 Kotlin 还是比较年轻,下面是 Github 上用 Kotlin 写的项目的数量,和右边其他主流语言比比还是有非常漫长的路要走。

Kotlin 是什么

虽然官方有很多蓝图,虽然 Kotlin 的卫道士会来喷,但是从目前看来,Kotlin 是 Java(javascript)的一个语法糖,我们就不说 Javascript 混乱的 es2015, es6, es7, jsx, es8 了。何为 Java 语法糖?就是给一些繁琐的 Java 代码用种方式简化,废话不多说,举几个例子:

// 我是注释:这是一个匿名函数的定义(lambda)
fun(x: Int, y: Int): Int = x + y
fun(x: Int, y: Int) = x + y // 返回值也不写了,会推导

恩,看代码就明白的意思我就不解释了。

// switch他哥
when (x) {
    in 1..10 -> print("x is in the range") // Python的影子
    in validNumbers -> print("x is valid") // -> 是 lambda
    !in 10..20 -> print("x is outside the range")
    else -> print("none of the above") // switch 条件
}

恩恩

data class User(val name: String, val age: Int)

这个要解释一下,这是一个 class 定义,两个成员 name, age,data class 等于编程中超级常用的 model class(数据库/Json),这么一句定义,Kotlin 帮助完成了几个事情:

strings.filter { it.length == 5 }.sortBy { it }.map { it.toUpperCase() }

高阶函数,map, reduce, filter, sortBy,花括号里面是一个单参数(it) lambda,非常省略。

好了,语言不多说,有兴趣的可以去看看参考材料的一些东西,一句话总结就是 Kotlin 是一个集各种语言表达简单方式于一身的 Java。不愧是做 IDE 的,对语言优势还有程序员的懒惰是非常了解的,最后,IDE 还有一个功能 Java -> Kotlin,转换的代码还是可读的,但是没有 Kotlin -> Java ...

Kotlin 语言对测试工具的影响

Kotlin 最终会被编译成 Java bytecode,然后变成 APK。如果 APP 部分或者全部使用 Kotlin 开发,是否会对现在的测试体系有影响呢?
这个是大家做测试时候关心的,我大致罗列了质量保障体系里面主要的几类工具

Appetizer 监控 Kotlin APP

因为 Appetizer 是通过 Dalvik 插桩实现监控的,理论上是完全兼容 Kotlin APP 的,我们本着严谨的态度,找了一些开源的 Kotlin APP 编译,插桩,监控。下面这个开源 Kotlin 开发的豆瓣 FM 客户端说一说:
https://github.com/nekocode/Murmur

扩展阅读


↙↙↙阅读原文可查看相关链接,并与作者交流