控制语句
1.条件分支
- 简单分支
首先“if……else……"的条件使用规则和java中的用法是一样的。
我们在Kotlin中给某个文本赋值的时候可以直接用该语句进行赋值
eg: tv.text = if(is_odd==true)"正确情况下的赋值是正值1"else"错误情况下的赋值时-1"
可以直接这么赋值,代码量似乎又减少了一点。
- 多路分支
在多路分支的时候,我们在Java中会用switch/case的方式进行反复的判断来进行一些相关的逻辑操作,在Kotlin中我们不再用这种方式了,我们用一种新的方式when/else的方式来控制
eg: var count:Int =0
when(count){
0 -> tv.text="这是count为0d的时候的的赋值"
1 -> tv.text="这是count为1的时候的赋值情况"
else -> tv.text="这是count为其他的情况的赋值
}
count=(count+1)%3
从上面的语句我们可以看出,when/else省略了switch/case的break语句,还有default语句,直接使用else代替default.
如果五个常量都要进入同一个分支当中,只需要用逗号隔开他们即可。如果几个常量刚好是连续的几个数字,可以使用
”in 开始值..结束值“,若不在某个范围内,使用”!in 开始值...结束值“
eg: var count:Int =0;
tv.text=when(count){
1,3,5,7,9 ->"这是1,3,5,7,9 时候的赋值"
in 13...19 ->"这是13到19连续数字的赋值"
!in 6...10 ->"这是不是6到10连续的数字的赋值"
else -> "其他情况下的赋值情况"
}
count =(count+1)%20
- 类型判断
在java中使用类型判断的时候,我们用instancesof,然而在Kotlin中我们需要知道某个类型的话,使用is就用
2循环处理
- 遍历循环
java中的遍历,做android开发的小伙伴们应该都在熟记于心了,那么在Kolin中的循环遍历和其还是有很大区别的。
eg:
val girlDes : Array<String> = arrayOf("小姐姐","穿上超短裙","真的很漂亮","真的很性感")
var des :String =""
for(item in girlDes ){
des ="$des $item,\n"
}
tv.text = des
还有一种方式:根据数组的下标找取元素
val girlDes : Array<String> = arrayOf("小姐姐","穿上超短裙","真的很漂亮","真的很性感")
for(i in girlDes.indices){
var des :String =""
if(i%2 ==0){
des ="$des ${girlDes [i],\n}"
}else{
des = "$des ${girlDes [i],\n}"
}
}
tv.text = des
- 条件循环
Kotlin 的for(i in 数组变量:.indices)无法很好的处理一些情况:Kotlin提供了诸如until step downTo这样的关键字
1)如何设定条件判断的其实值和终止值
2)每次循环之后的递增值不是1的情况
3)循环方向不是递增而是递减
4)与条件判断有关的变量不止一个
5)循环过程中的变量
// 左闭又开区间,合法值包括11但是不包括66
for(i in 11 until 66){...}
//每次默认递增1,这里改为每次递增4
for(i in 23...89 step){}
//for循环默认递增,这里使用downTo表示递减
for (i in 50 downTo 7){}
- 跳出多重循环
Kotlin中使用@标记来跳出循环,而不用java中break
eg:
var i:Int =0
var is_found = false
val girlDes : Array<String> = arrayOf("小姐姐","穿上超短裙","真的很漂亮","真的很性感")
outSide@ while(i<girlDes .size){
var j:Int =0
var item =girlDes [i]
while(j<item.length){
if(item[j]=='一'){
is_found=true
//发现情况直接跳出循环
break@outSide
}
j++
}
}
3 空安全
- Kotlin中提供的一些方法判断:
1)isNullOrEmpty:判空返回true,f否则为false
2)isNullOrBlank:空指针,字符串长度为0,或者全为空格时返回true
3)isEmpty:字符串长度为0时返回true,只有非空字符串才可以调用
4)isNotEmpty:字符串长度大于0时返回true,只有非空字符串才可以调用
5)isNotBlank:字符串长度大于0且不是全空格串返回true,只有非空字符串才可以调用
6)isBlank:字符串长度为0或者全为空格时返回true,只有非空字符串草可以调用
- 申明可变变量
非空字符串要么在声明的时候就赋值,要么就下调用前赋值,否则会提示赋值,正常申明的字符串都是非空的。
1. var str:String?
2. var arrayTest:Array<String?>
- 检验空值的运算符
eg:
var str_B:String
var length_test :Int?
length_test = str_B?.length
tv.text = "使用?.得到的字符串长度为$length_test"
以上的?.表示的是变量为空的时候返回null,所以返回的变量必须是可控的类型
- 新的运算符"?:"
这个运算符相当于java中的三元运算符
eg: leng = strB?.length?:-1 //表示的是为空的时候就返回右边的值(感觉好麻烦的样子啊)
- 新的运算符"!!"
表示的是强行的把该变量从可空类型转变为非空类型,不做检查,如果运行的时候有空,抛出异常
eg : length= strB!!.length
4等式判断
字符串的等值性判断要求 | Java的判断方式 | Kotlin d的判断方式 |
判断两个字符串是否相等 | staA.equals(StrB) | strA==strB |
判断两个字符串是否不等 | !staA.equals(StrB) | strA!=strB |
Kotlin 判断引用是否相等使用三个等号"===" 意思为不仅结构相等而且地址都要相等
- 新运算符 "is"和"in"
java中判断类型名称是用的是instanceof
kotlin中判断类型是否相等用is
in这个运算符判断的是数组中是否存在某个元素通过”变量名 in 数组名“判断是否存在等值元素,使用起来也很方便