if表达式
在Kotlin
中,if
是一个表达式,即它会返回一个值。
// 传统⽤法
var max = a
if (a < b) max = b
// With else
var max: Int
if (a > b) {
max = a
} else {
max = b
}
// 作为表达式
val max = if (a > b) a else b
if
的分支可以是代码块,最后的表达式作为该块的值:
val max = if (a > b) {
print("Choose a")
a
} else {
print("Choose b")
b
}
如果你使用if
作为表达式而不是语句,该表达式需要有else
分支。
private const val USERNAME = "Kotlin";
private const val PASSWORD = "Jetbranis";
private const val ADMIN_USER = "admin";
private const val ADMIN_PASSWD = "admin";
private const val DEBUG = 1;
private const val USER = 0;
fun main(args: Array<String>) {
// if表达式
val mode: Int = if (args.isNotEmpty() && args[0] == "1") {
DEBUG;
} else {
USER;
}
println("请输入用户名:");
val userName = readLine();
println("请输入密码:");
val passWord = readLine();
if (mode == DEBUG && userName == ADMIN_USER && passWord == ADMIN_PASSWD) {
println("管理员登录成功");
} else if (userName == USERNAME && passWord == PASSWORD) {
println("登录成功");
} else {
println("登录失败");
}
}
when表达式
when
取代了类C
语言的switch
操作符。
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> { // 注意这个块
print("x is neither 1 nor 2")
}
}
when
将它的参数与所有的分支条件顺序比较,直到某个分支满足条件。when
既可以被当做表达式使用也可以被当做语句使用。
fun main(args: Array<String>) {
val x = 5;
when (x) {
1 -> println("x == 1");
2 -> println("x == 2");
3, 4 -> println("x == 3 or x == 4");
is Int -> println("Hello $x");
in 1..100 -> println("$x is in 1..100");
!in 1..100 -> println("$x is not 1..100");
args[0].toInt() -> println("x == args[0]");
else -> {
println("相当于switch的default");
}
}
val mode = when {
args.isNotEmpty() && args[0] == "1" -> 1;
else -> 0
}
}
如果它被当做表达式,符合条件的分支的值就是整个表达式的值,如果当做语句使用,则忽略个别分支的值。
如果其他分支都不满足条件将会求值else
分支。
如果when
作为一个表达式使用,则必须有else
分支。
网友评论