任何事情真的很怕拖着,拖着会让人越变越懒,慢慢失去动力,所以以后任何事情真的都需要坚持,以后会坚持持续更新kotlin的学习和使用,本篇文章讲述kotlin中逻辑控制运算,在以后的文章中会每篇增加一些Kotlin Koans 的题目解答,虽然网上有很多已经给出了答案,但还是想从自己的角度整理一下每个知识点,增强自己的理解吧。
一、if语句
kotlin中的if语句与java中最大的区别就是有返回值,可以使用如下:
private fun max(a: Int, b: Int): Int = if (a > b) a else b
上述代码很简单是一个比较大小的方法,在kotlin中比较的同时会自动返回数据,我们调用此方法
var maxNumber = max(50, 25)
println(maxNumber)
//输出结果为 System.out: 50
现在我们将每个条件加入其他执行语句看kotlin会如何处理
private fun maxPrint(a: Int, b: Int) = if(a > b){
println("message a")
b
a
}else{
println("message b")
a
b
}
//01-28 13:47:49.299 5365-5365/com.example.wuliangliang.kotlintest I/System.out: message a //01-28 13:47:49.299 5365-5365/com.example.wuliangliang.kotlintest I/System.out: 50 a
这里我们在每个条件中加入了一个输出语句,并有两个返回值,不过系统执行了输出语句,却只返回了a = 50;这就是kotlin中if语句返回的特性,会默认返回最后一个值,用户可自行将a和b的值调换,看看输出的结果。
二、when语句
when语句更像是Java中的switch语句,但更比switch灵活和简洁
private fun desc(obj: Any): String {
when (obj) {
1 -> return "This is 1"
"Hello" -> return "This is hello"
1L -> return "This is long"
1.0f -> return "This is float"
else -> return "This is unknowing"
}
}
判断传入对象的类型返回不同的字符串,还可以进行区间的判断、类型、多条件判断等
when(obj){
is String -> println("String is $obj")
is Int -> println("Int is $obj")
1,2 -> println("obj == 1 || obj == 2")
in 1..10 -> println("In 1-10 is $obj")
!in 1..10 -> println("! 1-10 is $obj")
}
前面刚学习过if语句,有没有想过用真个when语句去实现刚才取最大值的方法?其实很简单
var a = 50
var b = 25
when{
a>b -> println("max = $a" )
else -> println("max = $b")
}
当when后面不加参数时,他就相当于if语句,每一条都相当于if里面的条件语句,由于kotlin中逻辑语句又返回数据那上述的when方法可以更进一步简写,看看是不是更简洁更清楚
private fun desc(obj: Any) = when (obj) {
1 -> "This is 1"
"Hello" -> "This is hello"
1L,2L -> "This is long"
1.0f -> "This is float"
else -> "This is unknowing"
}
三、for语句
for循环的单独用法:
for (x in 1..5 step 2) {
Log.e("list", "x = $x")
}
for成、循环用于遍历数组:
var list = listOf("A", "B", "C", "D")
for (item in list) {
Log.e("list", item)
}
输出结果为:
这里是利用for循环对数组进行遍历,下面根据索引遍历:
for (index in list.indices) {
Log.e("list", "index $index is ${list[index]}")
}
当然还可以利用数组的withindex()遍历
var list = listOf("A", "B", "C", "D")
for ((index,value) in list.withIndex()){
Log.e("list","index = $index value = $value")
}
四、while循环
while 和do-while在使用和理解上与java基本一致。
while (a>=10){
a -= 10
Log.e("while"," a = $a")
}
do-while语句:
do {
a-= 10
Log.e("while"," a = $a")
}while (a>=10)
}
五、continu 和 break
loop@ for (i in 1..5) {
for (j in 1..5) {
if (i== 3 && j==3)
break@loop
else
Log.e("break","i = $i and j = $j")
}
}
输出结果为:
continue 的输出结果为:
六、例题
在kotlin koans中的第二题,就是使用kotlin中的while对集合的遍历,然后拼接成一段字符串,代码如下:
fun toJSON(collection: Collection<Int>): String {
var stringBuilder = StringBuilder()
stringBuilder.append("[")
var iterator = collection.iterator()
while (iterator.hasNext()){
var i : Int = iterator.next()
stringBuilder.append(i)
if (iterator.hasNext()){//判断后面是否还有数据
stringBuilder.append(", ")
}
}
stringBuilder.append("]")
return stringBuilder.toString()
}