为什么要用kotlin
首先,看看Android开发者中心的回答:
- 富有表现力且简洁:您可以使用更少的代码实现更多的功能。表达自己的想法,少编写样板代码。在使用 Kotlin 的专业开发者中,有 67% 的人反映其工作效率有所提高。
- 更安全的代码:Kotlin 有许多语言功能,可帮助您避免 null 指针异常等常见编程错误。包含 Kotlin 代码的 Android 应用发生崩溃的可能性降低了 20%。
- 可互操作:您可以在 Kotlin 代码中调用 Java 代码,或者在 Java 代码中调用 Kotlin 代码。Kotlin 可完全与 Java 编程语言互操作,因此您可以根据需要在项目中添加任意数量的 Kotlin 代码。
- 结构化并发:Kotlin 协程让异步代码像阻塞代码一样易于使用。协程可大幅简化后台任务管理,例如网络调用、本地数据访问等任务的管理。
最关键的是什么呢?google 的力推!!!
随着kotlin
的扶正,越来越多的第三方的支持,jetpack
的支持。。。。
反抗不了现实,那就一块学习拥抱kotlin吧。
先从基础语法开始。
1. 函数
在kotlin
中 函数的常见写法如下所示:
fun sum(a Int, b Int): Int {
return a + b
}
在上面的函数中,fun
表示这是一个函数,sum
是函数名称,(a Int, b Int)
是参数列表。
这里面参数跟 java
的声明正好相反。而参数列表后面的:Int
是指返回类型。在这里我们可以看到代码的末尾并没有;
在kotlin
中是可以省略的。
在kotlin 中像上面的函数还有更简单的写法,如下:
fun sum(a: Int, b: Int): Int = a + b
fun sum(a: Int, b: Int) = a + b
只有表达式体函数的返回类型才可以向上面这样省略。
对于有返回值的代码块体函数,必须显式的写出返回类型和return
语句。
2. 变量
首先我们先看下在kotlin
中的变量常见的都有那些声明,
var name: String? = null // 初始值为null,可以再次赋值
var name2 = "tom" // 根据“tom”自动推断类型为String,可以再次赋值
val age: Int = 20 // 不可再次赋值
lateinit var adapter: UserAdapter // 延迟初始化,可以不设置初始值
// 懒加载 在用到的时候会执行lazy中的代码初始化
val homeAdapter: HomeAdapter by lazy { HomeAdapter(datas) }
从上面的代码可以看出在kotlin
中,变量的声明声明是以关键字开始的。
val(来自value)-表示不可变引用。对应的是Java
中的final
变量。
var(来自variable)-表示可变引用。变量的值可以被改变。
3. 字符串模板
对于字符串模板我们同样先看kotlin
中的用法。
// print: tom的年龄是20
println("$name 的年龄是$age")
// print: 1 + 2 的值是:3
println("1 + 2 的值是:${sum(1, 2)}")
在kotlin
中字符串的拼接更加便捷,$后面可以直接拼接变量,也可以通过{}
符号来拼接表达式。
4. if
条件表达式
kotlin
中的if表达式用法,如下:
// if 是有返回值的 可以直接给变量赋值
var age3 = if (age > age2) age else age2
// 也可以在函数中使用
fun age() = if (age > age2) age else age2
从上面的例子可以看出if
表达式是有返回值的,在代码块的最后一行就是返回值,在变量和函数中赋值都可以用到。
5. when
表达式
先来看kotlin
中when
表达式的用法:
var age4 = when(name) {
"Tom" -> 20
"Jay" -> 25
else -> 10
}
从上面的例子可以看出,when
表达式跟if表达式一样,都是带返回值的表达式,用法有点像Java
中的switch
。但->
的用法更简便,后边可以跟{}
代码块,依然是最后一句代码为返回值。
6. for
循环
kotlin
中的for
循环可以对任何的迭代器进行遍历,类似foreach
,语法例子如下:
for (i in 1..3) {
println(i)
}
print:
>1
>2
>3
for (i in 1 until 3) {
println(i)
}
print:
>1
>2
for (i in 6 downTo 0 step 2) {
println(i)
}
print:
>6
>4
>2
>0
从上面的第一个for
循环中可以看出 1..3
指的是区间包含首尾;
第二个for
循环的until
表示从1到3但不包含3;
第三个for
循环的6 downTo 0
表示从6递减到0,step
是步长,表示每次递减多少。
7. while
循环
kotlin
的while
循环和Java
的while
循环没什么大的区别。如下:
while (x > 0) {
x--
}
do {
val y = retrieveData()
} while (y != null) // y 在此处可见
到这里kotlin
的基础语法大概就差不过了,其他的跟java
差不太多,主要还是一些习惯的问题。
kotlin
的其他用法,比如习惯用法,顶层函数,扩展函数,高阶函数,协程。。。在后续的学习中再与大家分享吧。