接上节:
在进行一些业务逻辑的处理或者实现一些算法的时候,避免不了地需要使用诸如选择判断,循环控制之类的逻辑。
在Kotlin中,条件语句主要有两种实现方式:if和when
在Kotlin中,if语句和Java中任何很小,在Kotlin中,if语句是可以有返回值的,这个返回值就是每个if条件的最后一行代码。还是之前的那个例子,比较两个数中比较小的那个数,在Kotlin中,我们可以这样写:
fun getMin(num1:Int,num2: Int):Int{
var value = 0
if (num1<num2){
value = num1
}else{
value = num2
}
return value
}
这里if语句的用法与java中完全一致。然而我们上边提到了在Kotlin中,if语句是有返回值的,返回值就是if语句的最有一行。所以我们就可以将上方的getMin()方法修改成这样:
fun getMin(num1:Int,num2: Int):Int{
return if (num1<num2){
num1
}else{
num2
}
}
直接返回一个if语句的返回值即可。到这里你是不是觉得已经精简了很多?用点子智慧嘛
想想我们之前提到的语法糖,是不是有灵感了,哈哈哈
fun getMin(num1:Int,num2: Int)=if (num1<num2){
num1
}else{
num2
}
然后简化一下就成了这样:
fun getMin(num1:Int,num2: Int)=if (num1<num2) num1 else num2
我的老天鹅,这简直是天壤之别。
when对标的其实是Java中的switch,我们用一个简单的例子看看,用if语句实现:
fun getColor(name:String) = if(name == "banana"){
"yellow"
} else if (name == "apple"){
"red"
}else if(name == "peach"){
"pink"
}else{
"null"
}
如果用java的switch语句来写的话,就需要分很多的case,然后每个case结束之后还需要添加break来进行case的结束,否则将会继续进行判断。
而在Kotlin中,我们就可以这样写:
fun getColor(name:String) = when(name){
"banana"->"yellow"
"apple"->"red"
"peach"->"pink"
else->"black"
}
是不是简单明了?
还有一种when中不加参数的写法:
fun getColor(name:String) = when{
name == "banana"->"yellow"
name == "apple"->"red"
name == "peach"->"pink"
else->"black"
}
在Kotlin中,“==” 代表了判断内容相等 ,“ ===”号代表了判断内存地址相等
这样的话,可能有些人会觉得没有必要。但是如果有这样一个场景,所有b开头的东西,我们都想让他变成黄色,那么就可以这样写:
fun getColor(name:String) = when{
name.startsWith("b") ->"yellow"
name == "apple"->"red"
name == "peach"->"pink"
else->"black"
}
在Java中,有两种循环语句:for循环和while循环。而在Kotlin中,也提供了for循环和while循环,其中while循环在语法上与java中的while循环是一样的,这里就不做赘述。我们一起看看for循环。
java中的for循环有for-i循环和for-each循环。在Kotlin中,舍弃了for-i循环,而大大加强了for-each循环,形成了Kotlin独有的for-in循环。
首先我们知道,对于一个循环来说最重要的就是循环区间。而在Kotlin中,区间有一种特殊的表示方法:
0..10
这句话代表了从0到10的闭区间,即[0,10],知道区间的写法之后,就可以来写我们的for-in循环了,我们试着输出一下从0到10所有的数:
for (i in 0..10){
println(i)
}
在日常情况下,我们用到最多的是左闭右开区间,例如一个长度为10的数组的下标范围是0-9.即[0,9)。在Kotlin中,可以用until关键字来标识一个左闭右开的区间。那么如果我们想要输出0-9的话,就可以写成:
for (i in 0 until 10){
println(i)
}
然后有时候,我们会通过操作i来控制循环,在上面的两个例子中,i都是一直在累加的,而我们有时候需要将i进行i=i+2,i=i+3等运算,那我们就可以这样写:
for (i in 0 until 10 step 3){
println(i)
}
如果我们要用到一个降序区间的话,可以这样写:
for (i in 10 downTo 0 step 3){
println(i)
}
程序的逻辑控制就聊到这里,下篇文章我们聊聊Kotlin中的面向对象编程