Kotlin:Google让我们使用Kotlin的理由
2017-07-23 本文已影响14人
1024工场
在2017 Google I/O大会的主旨演讲中,宣布Kotlin语言将在Android上正式受到官方支持。相信开发人员,尤其是Andoid开发者都或多或少的听过Kotlin,它并不是横空出世的新东西。既然Google已经做支持了,那么我们也有理由深入学习一下。
那么Google有什么理由?Kotlin到底有什么优点?让我们使用Kotlin ?下面来一起探讨一下。
一、非常适合Android开发,带来了现代语言优势,而不引入新的限制
1. 开源性:
- Kotlin是一个开源项目,主要在Apache 2,并不属于某一个公司;
2. 兼容强:
- Kotlin完全兼容JDK6,确保在老Android设备运行;
- Android Studio 3.0以上和Android构建系统完全支持Kotlin相关工具;
3. 性能优:
- 由于和Java非常相似字节码结果,Kotlin运行速度和相同的Java代码一样块;
- 随着对Kotlin对内联函数支持,使用lambds编写代码通常比相同Java代码运行更快;
4. 互用好:
- Kotlin100%支持和Java/C++(JNI)相互调用,允许使用已有的Android库,包含注解,数据绑定和Dagger等;
5. 占用小:
- Kotlin运行时库非常紧凑,仅仅使得Debug.apk文件增加几百个方法,小于100K。Release.apk通过Proguard优化更小;
6. 编译快:
- Kotlin支持高效的增量编译,大大减少了编译时间;
7. 学习易:
- Kotlin插件提供了Java到Kotlin自动转换器;
- Kotlin Koans提供了一系列包含语言关键功能的练习;
8. 新特性:
- 语法简单:
- 句子后不加分号;
- DataClass自动生成getter/setter等;
- 默认参数值减少方法重载等;
- 使用var标识变量,val标识常量更加简洁;
- 类型可推断,没有Java强制类型转换繁琐;等新特性;
- 空指针安全:减少过多的检测空防御代码;
- 方法扩展:可以自行扩展Framework的API;
- Lambda、高阶函数、函数式编程:使得代码更简单灵活;
- 字符串模板:更灵活的字符串拼接;
语法简单:
//变量和常量,类型推断:变量当前的版本号,类型Int可以根据值推断出来
var currentVersionCode = 1
//显式声明类型
var currentVersionName : String = "1.0"
//方法声明
fun main(args: Array<String>) {
println(args)
}
//类和继承关系声明
class MainActivity : AppCompatActivity() {
}
//DataClass自动生成getter,setting,hashcode和equals等方法
data class Book(var name: String, val price: Float, var author: String)
//支持默认参数值,减少方法重载
fun Context.showToast(message: String, duration:Int = Toast.LENGTH_LONG) {
Toast.makeText(this, message, duration).show()
}
空指针安全:
//空安全调用符号?,如果对象为null则不调用,不抛出空指针异常
fun testNullSafeOperator(string: String?){ System.out.println(string?.toCharArray()?.getOrNull(10)?.hashCode())
}
扩展方法:
//向Context扩展longToast方法
fun Context.longToast(message: String) {
Toast.makeText(this, message, Toast.LENGTH_LONG).show()
}
//通过applicationContext对象调用longToast方法
applicationContext.longToast("hello world")
Lambda,高阶函数,Stream API:
//使用Lambda设置按钮监听
findViewById(R.id.content).setOnClickListener {
Log.d("MainActivity", "$it was clicked")
}
//使用高阶函数,传入函数作为参数(或者作为返回)
fun SharedPreferences.editor(f: (SharedPreferences.Editor) -> Unit) {
val editor = edit()
f(editor)
editor.apply()
}
//Stream API调用方式,使得编程更加方便
Jsoup.parse(URL(url), PARSE_URL_TIMEOUT).getElementsByClass("table table-sm")
.first().children() .filter { "tbody".equals(it.tagName().toLowerCase()) }
.flatMap(Element::children).forEach {
trElement ->ProxyItem().apply {
trElement.children().forEachIndexed { index, element ->
when (index) {
0 -> {
host = element.text().split(":")[0]
port = element.text().split(":")[1].toInt()
}
1 -> protocol = element.text()
5 -> country = element.text()
}
}
}.let(::println)
}
字符串模板:
//在模板中灵活运用对象、变量等
val book = Book("Thinking In Java", 59.0f, "Unknown")
val extraValue = "extra"
Log.d("MainActivity", "book.name = ${book.name}; book.price=${book.price};extraValue=$extraValue")
二、已经被许多大公司采用
国外的如Pinterest、Basecamp和Keepsage等公司已经成功的将它们的应用迁移到Kotlin,反馈在工作质量和速度方面有很大的提升,使得源码行数减少30%,方法数量减少10%。
三、提供了超越标准语言的工具
1 .Kotlin Android Extensions:一个编译器扩展,允许你从代码去除findViewById()调用,使用合成编译器生成的属性替代;
2 .Anko:一个围绕Android API提供更友好的Kotlin包装的库,还有一种SDL可以使用Kotlin代码替换xml布局;
好处Google已经说了这么多了,别犹豫了开始我们的Kotlin学习吧。
1.新技术,新未来!尽在1024工场。时刻关注最前沿技术资讯,发布最棒技术博文!(甭客气!尽情的扫描或者长按!)
2.加入“Kotlin开发”QQ讨论群,一起学习一起Hi。(甭客气!尽情的扫描或者长按!)
Kotlin开发群