字符串模板
$ 表示一个变量名或者变量值
$varName 表示变量值
${varName.fun()} 表示变量的方法返回值:
var a = 1
// 模板中的简单名称
val s1 = "a is $a"
a = 2
// 模板中的任意表达式
val s2 = "${s1.replace("is", "was")}, but now is $a"
Log.e("zpan","s1==" + s1 + "\t\t\ts2==" + s2)
E/zpan: s1==a is 1 s2==a was 1, but now is 2
if表达式
一个 if 语句包含一个布尔表达式和一条或多条语句。
if 作为表达式,else 分支是不可少的;有了 if 表达式,Java的三元表达式也就不需要了。
// 传统用法
var max = a
if (a < b) max = b
// With else
var max: Int
if (a > b) {
max = a
} else {
max = b
}
// 作为表达式,可以把 IF 表达式的结果赋值给一个变量
val max = if (a > b) a else b
// if的分支可以是代码块,最后的表达式作为该块的值:
val max = if (a > b) {
print("Choose a")
a
} else {
print("Choose b")
b
}
When 表达式
// 1、when 类似于 switch 操作符。
// 在 when 中,else 同 switch 的 default。如果其他分支都不满足条件将会求值 else 分支。
fun aboutWhen(obj: Any) = when (obj) {
1 -> print("满足1条件")
2 -> print("满足2条件")
else -> {
print("其他条件不满足,执行该代码块")
}
}
// 2、如果很多分支需要用相同的方式处理,则可以把多个分支条件放在一起,用逗号分隔:
fun aboutWhen1(obj: Any) = when (obj) {
0, 1 -> print("满足0或者1条件")
else -> print("其他条件不满足,执行该代码块")
}
// 3、检测一个值在(in)或者不在(!in)一个区间或者集合中
fun aboutWhen2(obj: Any) {
val list = listOf{"元素一";"元素二"}
when (obj) {
in 1..10 -> print("在[1-10]范围内")
in list -> print("在集合内")
!in 10..20 -> print("不在[10-20]范围内")
else -> print("其他条件不满足,执行该代码块")
}
}
// 4、when 也可以用来取代 if-else if链。
// 如果不提供参数,所有的分支条件都是简单的布尔表达式,而当一个分支的条件为真时则执行该分支:
fun aboutWhen3(obj: Any) = when {
isRight() -> print("为true时,执行该分支")
isWrong() -> print("为false时,不执行该分支")
else -> print("其他条件不满足,执行该代码块")
}
fun isRight(): Boolean {
return true
}
fun isWrong(): Boolean {
return false
}
// 5、检测一个值是(is)或者不是(!is)一个特定类型的值。
// 注意: 由于智能转换,你可以访问该类型的方法和属性而无需 任何额外的检测。
fun aboutWhen4(obj: Any) = when(obj) {
is String -> obj.startsWith("以某个字符串开头")
else -> false
}
for 循环
for 循环通过任何提供的迭代器进行迭代。
fun setFor() {
val items = listOf("zhang", "liu", "wang")
// 根据元素迭代
for (item in items) {
Log.e("zpan","=====单个元素值====" + item)
}
// 根据下标迭代
for (item in items.indices) {
Log.e("zpan","=====单个元素下标====" + item)
}
}
E/zpan: =====单个元素值====zhang
E/zpan: =====单个元素值====liu
E/zpan: =====单个元素值====wang
E/zpan: =====单个元素下标====0
E/zpan: =====单个元素下标====1
E/zpan: =====单个元素下标====2
while 循环
while 和 do...while 类似于Java用法
fun setWhile() {
val items = listOf("zhang", "liu", "wang")
// while 循环 :线判断条件,再执行循环体
var index = 0
while (index < items.size) {
Log.e("zpan","item at $index is ${items[index]}")
index++
}
// do-while 循环 :先执行循环体,再执行判断条件,条件满足则循环。
// 注:该循环最少执行一次
do {
Log.e("zpan","======do-while======" + index)
} while (index < 1)
}
E/zpan: item at 0 is zhang
E/zpan: item at 1 is liu
E/zpan: item at 2 is wang
E/zpan: ======do-while======3
返回和跳转
- return:默认从最直接包围它的函数或者匿名函数返回。
- break:终止最直接包围它的循环。
- continue:继续下一次最直接包围它的循环。