学习里程碑
2018年08月10日 - 1-1初次认识Kotlin,实现Hello Word附源代码
2018年08月16日 - 2-1 认识Kotlin——数据类型
本章也是很简单的
-
条件分支
if…else…
用法和 Java 基本一致的,Kotlin在这里做了优化允许语句返回字符串,方便直接赋值
println("------------- if else --------------")
var str91: String
var num92: Int = 1
str91 = if (num92 == 1) "进入if" else "进入else"
println(str91)
输出结果
------------- if else --------------
进入if
when …else…
println("------------- when else --------------")
var num98: Int = 1
var str99: String = ""
str99 = when (num98) {
0 -> "数字 0"
1 -> "数字 1"
else -> "这里是else"
}
println(str99)
输出结果
------------- when else --------------
数字 1
println("------------- when else --------------")
var num98: Int = 100
var str99: String = ""
var num100: Int = 100
str99 = when (num98) {
0 -> "数字 0"
num100 -> "数字 num100=100"
else -> "这里是else"
}
println(str99)
输出结果
------------- when else --------------
数字 num100=100
优化后的 when … else … 也允许有返回值;不需要在break ; case 常量值 被 -> 代替了;Java 的 case后面只能跟常量,Kotlin 去掉了这个规则,允许引入变量,也可以引入具体的运算表达式。 也可以使用 in 或 !in 下边看代码:
println("------------- when else --------------")
var num98: Int = 1
var str99: String = ""
str99 = when (num98) {
in 10..15 -> "num98 in 10 至 15"
1,2,4,6,9 -> "num98 in 1,2,4,6,9"
!in 18..20 -> "num98 !in 18 19 20"
else -> "这里是else"
}
println(str99)
输出结果
------------- when else --------------
num98 in 1,2,4,6,9
-
循环处理
kotlin 的 for(item in list) 这个 形式和Java for(item :list) 类似 就说了,不明白的自行百度一下吧
Kotlin 停用了 for(初始;条件;增减) 换成了 for(i in 数组变量.indices) ,这里indices 表示数组下标,看代码
println("------------- for --------------")
var str110: String = ""
var forArray: Array<String> = arrayOf("千山鸟飞绝", "万径人踪灭", "孤舟蓑笠翁", "独钓寒江雪")
for (i in forArray.indices) {
if (i % 2 == 0) {
str110 = "$str110${forArray[i]},\n"
} else {
str110 = "$str110${forArray[i]}。\n"
}
}
print(str110)
输出结果
------------- for --------------
千山鸟飞绝,
万径人踪灭。
孤舟蓑笠翁,
独钓寒江雪。
条件循环 Kotlin 增加了until,step,downTo
for(i in 1 until 5)…… //左闭右开区间(包含 1 ,不包含 5)
for(i in 1..10 step 2)…… //i在1到10 之间,每次递增2
for(i in 8 downTo 3)…… //递减 输出结果:876543; i 从8递减到3
while循环 、 do …while… 循环 没有变化 和Java 一样
-
跳出循环
关键字: continue 继续下一个循环
break 跳出循环
var str110: String = ""
var forArray: Array<String?> = arrayOf("千山鸟飞绝", null, "万径人踪灭", " ", "孤舟蓑笠翁", "独钓寒江雪", " ", "独钓寒江雪")
var num112: Int = -1
var count: Int = 0
while (num112 <= forArray.size) {
num112++
if (forArray[num112].isNullOrBlank())//忽略空或空字符串,继续下一个
continue
if (num112 % 2 == 0)
str110 = "$str110${forArray[num112]},\n"
else
str110 = "$str110${forArray[num112]}。\n"
count++
if (count == 4) break//4行后结束循环
}
print(str110)
输出结果:
千山鸟飞绝,
万径人踪灭,
孤舟蓑笠翁,
独钓寒江雪。
println("------------- while --------------")
var forArray: Array<String> = arrayOf("千山鸟飞绝", "万径人踪灭", " ", "孤舟蓑笠翁", "独钓寒江雪", " ", "独钓寒江雪")
var ii: Int = 0
var boo113: Boolean = false
//在外层添加了outside标记
outside@ while (ii < forArray.size) {
var j: Int = 0
var item = forArray[ii]
while (j < item.length) {
var sss = item[j].toString()
if (sss == "孤") {
boo113 = true
break@outside //里边在遇到 @outside 标记时,直接跳出 outside 循环
}
j++
}
ii++
}
print(boo113)
输出结果
------------- while --------------
true
最好可以debug run看一下 ,Kotlin可以在循环外层加 @ 标记,当遇到 @ 标记时,直接跳出外层这个标记。kotlin 可以通过break@标记位 实现跳出多重循环。
Kotlin 校验字符串空值的方法:
isNullOrEmpty | 为空指针或字符串长度为0时返回true,非空串与可空串都可以调用 |
isNullOrBlank | 为空指针或字符串长度为0或全为空格时返回true,非空串与可空串都可以使用 |
isEmpty | 字符串长度为0 时返回true,只允许非空串 使用 |
isNotEmpty | 字符串长度大于0时返回true,只允许非空字符串使用 |
isBlank | 字符串长度为0 或 全为空格时返回true,只允许非空串 使用 |
isNotBlank | 字符串长度大于0且不是全空格字符串时返回true,只允许非空串可调用 |
声明可为空的变量:
var str1:String = "非空"
var str2:String? = ""
var str3:String? = null
声明变量实例时,在类型名称后边加问号,表示该变量可以为空。
调用变量方法时,在变量名称后面加问号,表示一旦变量为空就返回null
运算符 “?:” ,表示一旦变量为空,就返回该运算符右边的表达式
运算符 “!!" , 通知编译器不做非空校验。如果运行时发现变量为空,就抛出异常
等式判断:
Kotlin 把等式判断分为:结构相对 和 引用相等
结构相等,在Kotlin 中所有数据类型都可用 == 和 != 进行等式判断。这种不比较存储地址,而是比较变量结构内部值,称为 结构相等。
println("------------- 等式判断 --------------")
var str130: String = "你好"
var str131: String = "您好"
var str132: String = "你好"
if (str130 == str131)
print("str130 == str131")
else if (str130 == str132)
print("str130 == str132")
else if (str131 == str132)
print("str131 == str132")
输出结果
------------- 等式判断 --------------
str130 == str132
引用相等,运算符号是 === 和 !==,还是看一下书上的概念吧:
运算符is 和 !is 写法 : 变量名称 is 类型名称
println("------------- is 和 !is --------------")
var num144: Int = 123
var result = num144 !is Int
print(result)
输出结果
------------- is 和 !is --------------
false
运算符 in 和 !in 的用法和is 是一样的,写法是:变量名 in 数组名
这章写的很多,但还是比较简单的。