以前学JAVA的时候知道,程序的执行语句主要分3种:顺序、条件和循环。
if
Kotlin中的if和JAVA中几乎没有区别,唯一的区别就是Kotlin中if代码块的最后一行是if整个代码块的返回值,比如:
private fun testMethod(num1: Int, num2: Int): Int {
return if (num1 > num2) {
num1
} else {
num2
}
}
那么你打日志的话就可以看到testMethod方法的返回值是num1和num2中最大的那个。
配合Kotlin的语法糖,当一个函数的方法体只有一行代码的时候,可以省略方法体,直接用等号连接这一行函数,虽然这个if代码块看起来不是一行,但是它的作用和一行代码是相同的,所以这个函数可以写成这样:
private fun testMethod(num1: Int, num2: Int): Int = if (num1 > num2) {
num1
} else {
num2
}
再配上Kotlin的类型推导机制,最终简化版是这样:
private fun testMethod(num1: Int, num2: Int) = if (num1 > num2) num1 else num2
学到这里我觉得Kotlin有一种为了语法糖而语法糖的感觉,哈哈,别喷我,菜鸡的理解。
when
当年在学JAVA的时候,经常遇到在switch语句中忘了写break造成的一些BUG,查到天荒地老也查不出来,而且switch只能以整型或短于整型的变量作为条件,JDK1.7之后加了对字符串变量的支持。
Kotlin解决了JAVA中switch的痛点,而且提供了更加强大的特性,在写代码过程中,如果你写的if else特别多的地方,就应该考虑使用when了,比如我们做一个根据姓名返回成绩的函数:
private fun testMethod(name: String) = when (name) {
"Koma" -> 95
"Chan" -> 100
else -> 0
}
可以看出来when也是有返回值的,所以这里可以用单行函数的语法糖
for
Kotlin在for循环方便做了很大的修改,JAVA中的for-i在Kotlin中直接被废弃了,而for-each则被Kotlin加强了,变成了for-in循环:
for(i in 0..10){
LogUtils.d(i)
}
0…10 代表创建一个从0到10的区间数组,并且两端都是闭区间,如果想创建一个左闭右开的区间的话,把…换成until就可以了:
for(i in 0..10){
LogUtils.d(i)
}
不过until关键字要求左端必须小于等于右端,默认情况下,每次进入到循环都会+1,如果你想跳过其中一些元素的话,可以用step
for (i in 0 until 10 step 2) {
LogUtils.d(i)
}