今天是 Google I/O 2017 大会第一日。一觉醒来,发现 Kotlin 成为了 Android 的官方开发语言。谷歌安卓团队今天在 Google I/O 2017 大会 上宣布对 Kotlin 提供 first-class 的支持。
Kotlin来自捷克一家软件研发公司JetBrains,这家公司开发很多不错的好IDE,包括IntelliJ IDEA、Pycharm、PHPStorm等工具,Google官方提供的Android Studio也是JetBrains公司提供的。Kotlin号称Android世界的Swift。官方网址
Kotlin的优势:
- 创建一种兼容Java的语言
- 编译速度至少同Java一样快
- 比Java更安全
- 比Java更简洁
- 比最成熟的竞争者Scala还简单
主要特性如下所示:
轻量级:这一点对于Android来说非常重要。项目所需要的库应该尽可能的小。Android对于方法数量有严格的限制,Kotlin只额外增加了大约6000个方法。
互操作:Kotlin可与Java语言无缝通信。这意味着我们可以在Kotlin代码中使用任何已有的Java库;因此,即便这门语言还很年轻,但却已经可以使用成百上千的库了。除此之外,Kotlin代码还可以为Java代码所用,这意味着我们可以使用这两种语言来构建软件。你可以使用Kotlin开发新特性,同时使用Java实现代码基的其他部分。
强类型:我们很少需要在代码中指定类型,因为编译器可以在绝大多数情况下推断出变量或是函数返回值的类型。这样就能获得两个好处:简洁与安全。
Null安全:Java最大的一个问题就是null。如果没有对变量或是参数进行null判断,那么程序当中就有可能抛出大量的NullPointerException,然而在编码时这些又是难以检测到的。Kotlin使用了显式的null,这会强制我们在必要时进行null检查。
高阶函数、操作符重载、字符串模板等特征。
Demo演示
先来一段以前写过的demo来看看,也许你会因为它的简洁,方便而爱不释手。
fun main(args: Array<String>) {
// 常量(使用val关键字声明):
val a: Int = 10
val b = 10 // `Int`类型自动推断
val c: Int // 如果没有初始值,声明常量时,常量的类型不能省略
c = 10 // 明确赋值
val strings = arrayOfNulls<String>(10)//定义数组
val strings1 = arrayOf("one", "two")
// 变量(使用var关键字声明):
var x = 5 // `自动推断出 Int`类型
x += 1
// 可空布尔
val isFirst: Boolean? = null
println("isFirst=$isFirst")
// println(sum(c, x))
// printSum2(a, b)
// println(max2(c, x))
val list = ArrayList<String>()
list.add("one")
list.add("AA")
list.add("BB")
list.add("aCC")
list.add("Adc")
list.add("A133cdf")
list.add("A123cdf")
getArrayList(list)
}
/**
* 定义函数
*/
fun sum(a: Int, b: Int): Int {
return a + b
}
fun sum2(a: Int, b: Float) = a + b
fun printSum(a: Int, b: Int): Unit {
println(a + b)
}
fun printSum2(a: Int, b: Int) {
println(a + b)
}
/**
* 条件判断
*/
fun max(a: Int, b: Int): Int {
if (a > b) {
return a
} else {
return b
}
}
fun max2(a: Int, b: Int) = if (a > b) a else b
/**
* 类型后添加“?”来标识该引用可为空
*/
fun parsenInt(str: String): Int? {
if (str is String) {
return str.length
}
return null
}
/**
* 判断后的分支中可以直接当作该类型使用,无需显式转换
*/
fun getStringLength(obj: Any): Int? {
if (obj is String) {
// `obj`在该条件判断分支内自动转换成`String`
return obj.length
} else {
// 在离开类型判断分支后,`obj`仍然是`Any`类型
return null
}
}
/**
* for循环
*/
fun getArray(args: Array<String>) {
for (arg in args) {
print(arg)
}
for (i in args.indices) {
print(args[i])
}
}
/**
* while循环
*/
fun getArray2(args: Array<String>) {
var i: Int = 0
while (i < args.size) {
print(args[i++])
}
}
/**
* When表达式,比switch功能更强大
*/
fun case(obj: Any) {
when (obj) {
1 -> print("One")
"hello" -> print("String")
is String -> print("This is String type")
else -> print("unknown")
}
}
/**
* 区间(range)
*/
fun range(args: Array<String>) {
val x = 0
// 是否在指定区间内
if (x in 1..10) {
print("In")
} else {
print("Out")
}
if (x !in 0..args.lastIndex) {
print("Out")
}
}
/**
* 使用集合
*/
fun getArrayList(names: ArrayList<String>) {
names.filter { it.startsWith("A") }
.sortedBy { it }
.map(String::toUpperCase)
.forEach(::println)
}
是不是感觉爽爆了呢,现在开始可以抛弃Java了。