一、分支表达式
if...else分支表达式
在Java中,if...else是被称为if-else语句的,但是Kotlin中是一种表达式的体现,比如:
if(a == 1){
b = 2
}else{
b = 3
}
//这里可以等价写成
b = if(a==1) 2 else 3 //类似于Java中的三元表达式 a > b ? a : b
when...表达式
上述if-else表达式在刚用kotlin写Android项目时,作为一个已经熟练Java的选手可能不会使用b = if(a==1) 2 else 3这种形式,但是when表达式是基本会用到,因为when表达式对标的是Java中的switch语句,比如监听多个button的写法:
when(view?.id){
R.id.btn1 -> {}
R.id.btn2 -> {}
R.id.btn3 -> {}
R.id.btn4 -> {}
else -> {} //默认处理,看实际情况需要添加
}
try...catch表达式
Kotlin中try-catch也是一种表达式,如:
try {
c = a - b
}catch (e:Exception){
e.printStackTrace()
c = 0
}
//因为try和catch是各一个分支 所以写成如下表达式
c = try {
a - b
}catch (e:Exception){
e.printStackTrace()
0
}
二、常见运算符
== 与equals
"Kotlin" == "Kotlin" 等价于 "Kotlin".equals("Kotlin")
+ 与plus
1+1 等价于 1.plus(1)
in 与contains
val list = listOf(1,2,3)
if((2 in list) && list.contains(2)){
println("in和contains运算符是等价的")
}
[]与get
val map = mapOf(
"Hello" to 1,
"Kotlin" to 2
)
val value = map["Hello"]
val value2 = map.get("Hello")
println(value == value2)
三、中缀表达式
A to B 就是中缀表达式的形式,其等价于A.to(B),其定义的模型是:
infix fun<A,B> A.to(that:B): Pair<A,B> = Pair(this,that)
infix是中缀表达式的关键字,A.to(that:B)的形式就是有receiver为A,并且参数只有一个B,这样函数就可以表现成A to B,当函数表现为一个表达式时可直接写作简写的形式:Pair(this,that).下面简单用一个扩展方法说明中缀表达式的使用
infix fun String.rotate(count:Int):String{
val index = count % length
return this.substring(index) + this.substring(0,index)
}
println("KotlinStudy" rotate 6) // 得到StudyKotlin
四、Lamba表达式
Kotlin的匿名函数
//没有名字的函数
fun(){
println("Kotlin Study")
}
匿名函数的传递
//func就是变量名 函数的变量
val func = fun(){
println("Kotlin Study")
}
//调用
func()
倒推一下上述匿名函数的类型:接受零个参数,返回Unit类型
val func:() -> Unit = fun(){
println("Kotlin Study")
}
Kotlin中的Lamba表达式实际是匿名函数的更具语法糖表现形式的一种写法
val mLamba = {
println("Kotlin Study")
}
//上述可以等价写成下面
val mLamba:() -> Unit = {
println("Kotlin Study")
}
//从{}里面看没有参数可以推出是无参函数,println()也是无返回值,所以函数类型是Unit
下面有参数函数的Lamba表达式
val func:Function<Int,Unit> = {p -> println(p)}
//亦等价表现以下形式
val func:(Int) -> Unit = {p:Int ->
println(p)
}
Lamba表达式的参数省略形式
val func:Function<Int,Unit> = {
println(it) //只有一个参数,参数名可默认为it
}
有返回值的匿名函数Lamba表达式
val func = {p:Int ->
"Kotlin"
}
//这里可以看出 func代表的是一个匿名函数的传递,参数是int类型,返回值类型是String
val str = func(1) // str返回Kotlin