【Bugly 技术干货】Android开发必备知识:为什么说Kotlin值得一试,buglykotlin
1、Hello, Kotlin
Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处。
1.1 Kotlin的身世
-
写了许久Java,有没有发现其实你写了太多冗余的代码?
-
后来你体验了一下Python,有没有觉得不写分号的感觉真是超级爽?
-
你虽然勤勤恳恳,可到头来却被NullPointerException折磨的死去活来,难道就没有受够这种日子么?
-
直到有一天你发现自己已经写了好几十万行代码,发现居然全是getter和setter!
哈哈,实际上你完全可以不用这么痛苦,用Kotlin替代Java开发你的程序,无论是Android还是Server,你都能像之前写Java一样思考,同时又能享受到新一代编程语言的特性,说到这里你是不是开始心动了呢?下面我就通过这篇文章来给大家介绍一下Kotlin究竟是何方神圣。
话说,Kotlin是JetBrain公司搞出来的,运行在JVM上的一门静态类型语言,它是用波罗的海的一个小岛的名字命名的。从外观上,乍一看还以为是Scala,我曾经琢磨着把Scala作为我的下一门语言,不过想想用Scala来干嘛呢,我又不做大数据,而它又太复杂了o(╯□╰)o
用Kotlin创建一个数据类
data class Mondai(var index: Int = 0,
var title: String = "",
val ans: ArrayList<String> = ArrayList(),
var correct: Int = 0,
var comment: String = "",
var color: String = "",
private var lives: Int = 50)
最初是在intelliJ的源码中看到Kotlin的,那时候Kotlin的版本还不太稳定,所以源码总是编译不过,真是要抓狂啊,还骂『什么破玩意儿!为什么又出来新语言了?Groovy还没怎么学会,又来个Kotlin!』话说,Kotlin,难道是『靠它灵』的意思??
其实经过一年多的发展,Kotlin 1.0已经release,feature基本完善,api也趋于稳定,这时候尝试也不会有那种被坑的感觉了。过年期间也算清闲,于是用Kotlin做了个app,简单来说,就是几个感觉:
- 思路与写Java时一样,不过更简洁清爽
- 少了冗余代码的烦恼,更容易专注于功能的开发,整个过程轻松愉快
- 扩展功能使得代码写起来更有趣
- 空安全和不可变类型使得开发中对变量的定义和初始化倾注了更多关注
- 啊啊,我再也不用写那个findViewById了,真的爽爆有木有!
1.2 第一个Kotlin程序
Kotlin开发当然使用JetBrain系列的IDE,实际上intelliJ idea 15发布时就已经内置了Kotlin插件,更早的版本则需要到插件仓库中下载安装Kotlin插件——在安装时你还会看到有个Kotlin Extensions for Android,不要管他,已经过时了。安装好以后,我们就可以使用Kotlin进行开发了。
接下来我们用Android Studio创建一个Android工程,比如叫做HelloKotlin,在app目录下面的build.gradle文件中添加下面的配置:
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
ext.anko_version = '0.8.2'
ext.kotlin_version = '1.0.0'
……
dependencies{
……
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile "org.jetbrains.anko:anko-sdk15:$anko_version"
compile "org.jetbrains.anko:anko-support-v4:$anko_version"
compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
……
}
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
……
这里添加了kotlin对android的扩展,同时也添加了kotlin的gradle插件。
接下来就可以编写kotlin代码了——等等,Android Studio会帮我们生成一个MainActivity,你可以直接在菜单
Code -> Convert Java file to Kotlin file
将这个java代码转换为kotlin代码。截止到现在,你什么都不用做,程序就已经可以跑起来了。
2、完美为Java开发者打造
2.1 通用的集合框架
我们都知道Jvm上面的语言,像什么Java、Groovy、Jython啥的,都是要编成虚拟机的字节码的,一旦编成字节码,在一定程度上大家就都平等了。
英雄不问出身啊
有人做过一个非常形象的比喻:Java虚拟机语言就是打群架。Kotlin正是充分利用了这一点,它自己的标准库只是基于Java的语言框架做了许多扩展,你在Kotlin当中使用的集合框架仍然跟你在Java当中一样。
举个例子,如果你想要在Kotlin中使用ArrayList,很简单,Java的ArrayList你可以随意使用,这个感觉跟使用Java没有任何区别,请看:
//实际上就是创建一个ArrayList
val list = arrayListOf(1,2,3,4)
list.add(5)
list.remove(3)
for(item in list){
println(item)
}
当然,Kotlin标准库也对这些做了扩展,我们在享用Java世界的一切资源的同时,还能比原生Java代码更滋润,真是爽爆有木有:
val list = arrayListOf(1, 2, 3, 4, 5)
//doubleList = [2,4,6,8,10]
val doubleList = list.map {
it * 2
}
//oddList = [1,3,5]
val oddList = list.filter{
it % 2 == 1
}
//将list挨个打印出来
list.forEach {
println(it)
}
2.2 与Java交互
Kotlin的标准库更多的是对Java库的扩展,基于这个设计思路,你丝毫不需要担心Kotlin对Java代码的引用,你甚至可以在Kotlin当中使用Java反射,反正只要是Java有的,Kotlin都有,于是有人做出这样的评价:
Kotlin就是Java的一个扩展
这样说Kotlin显然是不公平的,但就像微信刚面世那会儿要为QQ接收离线消息一样,总得抱几天大腿嘛。
有关从Kotlin中调用Java的官方文档在此Calling Java code from Kotlin ,其中最常见的就是Getter/Setter方法对应到Kotlin属性的调用,举个例子:
准备一个Java类