Kotlin控制语句
条件分支
简单分支(if...else...)在java编程的基础用法上进行了强化
var boolean : Boolean = true; //简单分支 if(boolean){ st_tv_hello.text = "123" }else{ st_tv_hello.text = "456" } //在条件语句外层直接对st_tv_hello进行赋值 st_tv_hello.text = if(boolean){ "123" }else{ "456" } //去除大括号简化代码 st_tv_hello.text = if(boolean) "123" else "456"
多路分支(switch/case功能扩充成为when/else)使用lambda表达式,简单分支有的它都有,它的判断内容不仅可以是常量,也可以是变量,还可以是区间
var count : Int = 0; when (count){ 0 -> st_tv_hello.text = "123"; 1 -> st_tv_hello.text = "456"; else -> st_tv_hello.text = "789" } //可变量 var odd : Int = 0; var even : Int = 1; st_tv_hello.text = when (count){ odd -> "123"; even -> "456"; //if语句可以不没有else,when语句必须带上 else -> "789" } st_tv_hello.text = when (count){ 1,2,3,4,5,6,7,8 -> "123"; //9~18之间 in 9..18 -> "456"; //除了6~10之间 !in 6..10 -> "222" //if语句可以不没有else,when语句必须带上 else -> "789" }
*区间
区间表达式由具有操作符形式 .. 的 rangeTo 函数辅以 in 和 !in 形成。
for (i in 1..4) print(i) // 输出“1234” for (i in 4..1) print(i) // 什么都不输出 if (i in 1..10) { // 等同于 1 <= i && i <= 10 println(i) } // 使用 step 指定步长 for (i in 1..4 step 2) print(i) // 输出“13” for (i in 4 downTo 1 step 2) print(i) // 输出“42” // 使用 until 函数排除结束元素 for (i in 1 until 10) { // i in [1, 10) 排除了 10 println(i) }
类型检测和自动转换:我们可以使用 is 运算符检测一个表达式是否某类型的一个实例(类似于Java中的instanceof关键字)
fun getStringLength(obj: Any): Int? { if (obj is String) { // 做过类型判断以后,obj会被系统自动转换为String类型 return obj.length } //在这里还有一种方法,与Java中instanceof不同,使用!is if (obj !is String){ // XXX } // 这里的obj仍然是Any类型的引用 return null }
循环处理
Kotlin循环处理依旧采用for和while关键字,只是细微上有些微调
var sList : List<String> = listOf("123","13","14"); //for-in循环 java(for(item:sList)) var desc = ""; for (item in sList){ desc = "${desc}名称:${item}\n"; } //for-in循环 1 desc = ""; // sortBy表示升序排列,后面跟的是排序条件 sList.sortedBy { it.length } // sortByDescending表示降序排列,后面跟的是排序条件 sList.sortedByDescending { it.length } // indices是队列的下标数组。如果队列大小为10,下标数组的取值就为0~9 java(for(初始;;)) for (i in sList.indices){ desc = "${desc}名称:${sList[i]}\n"; } //迭代器遍历 var desc1 = ""; var iterator = sList.iterator(); //如果迭代器还存在下一个节点,就继续取出下一个节点的记录 while (iterator.hasNext()){ var next = iterator.next() desc1 = "${desc1}名称:${next}\n"; } //foreach遍历 var desc2 = ""; sList.forEach{ desc2 = "${desc2}名称:${it}\n"; } //跳出多重循环 var e:Int =0; var e1:String? ="hsdgfhjklsdfkjjkl"; outside@ while (e< e1?.length ?:0){ var q:Int =0; var item : Char = e1?.get(e) ?:'e'; while (q<item.toInt()) { if(q==8){ break@outside } q++ } e++ }
*等式判断 kotlin中用来比较字符串相等用‘==’ (java中用‘equals’)表示,如果要想连通存储地址一同比较可以用‘===’(java中用‘==’)