ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] ### **条件表达式:If** if表达式,我们可以分为 * 简单if语句 * if…else语句 * if…else if多分支语句。 ### **if else语句规则** * if后的括号不能省略,括号里表达式的值须是布尔型 * 如果条件体内只有一条语句需要执行,那么if后面的大括号可以省略。良好的编程风格建议加上大括号。 * 对于给定的if,else语句是可选的,else if 语句也是可选的。 * else和else if同时出现时,else必须出现在else if 之后。 * 如果有多条else if语句同时出现,那么如果有一条else if语句的表达式测试成功,那么会忽略掉其他所有else if和else分支。 * 如果出现多个if,只有一个else的情形,else子句归属于最内层的if语句。 * 如果你使用 if 作为表达式而不是语句(例如:返回它的值或者把它赋给变量),该表达式需要有`else`分支。 #### **1.传统用法,作为if语句** ``` var max = a if (a < b) max = b // With else var max: Int if (a > b) { max = a } else { max = b } ``` #### **2.作为if表达式** >[warning]**注意**:如果 if 作为表达式,显然必需要有else分支,因为表达式在任何情况下都应有返回值! ``` val max = if (a > b) a else b //if分支还可以是代码块,最后一行的表达式作为代码块的返回值: val max = if (a > b) { print("Choose a") a } else { print("Choose b") b } ``` ### **简单if语句** if语句,描述的是,如果条件满足,就执行某些操作。if语句的语法结构如下: ``` if(条件表达式){ //执行语句 } ``` 条件表达式:必选参数,可以是Boolean型变量或者返回结果为Boolean型的表达式。 执行语句:可选参数,任意的代码语句。 我们通过案例演示下条件表达式,参考案例: ~~~ fun main(args: Array<String>) { val a = true val b = false val c = "kotlin" val d = 2 if (a) { println("a 是 true") } if (a and b) { println("a 和 b 是true") } if (a or b) { println("a 或 b 是true") } if (c === "kotlin") { println("c 等于 kotlin") } if (d == 2) { println("d 等于 2") } if (1 + 1 == d) { println("1 + 1 = 2") } } ~~~ 运行结果 ``` a 是 true a 或 b 是true c 等于 kotlin d 等于 2 1 + 1 = 2 Process finished with exit code 0 ``` 如果,如果执行语句只有一句话,我们也可以省略大括号,采用如下形式: ``` if(条件表达式) //执行语句,要求只有一句话 ``` 所以,上面的代码,可以改为如下形式,参考代码: ~~~ fun main(args: Array<String>) { val a = true val b = false val c = "kotlin" val d = 2 if (a) println("a 是 true") if (a and b) println("a 和 b 是true") if (a or b) println("a 或 b 是true") if (c === "kotlin") println("c 等于 kotlin") if (d == 2) println("d 等于 2") if (1 + 1 == d) println("1 + 1 = 2") } ~~~ 运行结果 ``` a 是 true a 或 b 是true c 等于 kotlin d 等于 2 1 + 1 = 2 Process finished with exit code 0 ``` ### **if…else** `if…else`语句,描述的是,如果条件满足,就执行操作1,否则就执行操作2。`if…else`语句的语法结构如下: ``` if(条件表达式){ //操作1 }else{ //操作2 } ``` 条件表达式:必选参数可以是Boolean型变量或者返回结果为Boolean型的表达式。 操作1、操作2:可选参数,任意的代码语句。 比如,我们有一个求最值的例子,“如果a>b,最大值就是a,否则就是b”,我们可以用if…else语句去表示,参考代码: ~~~ fun main(args: Array<String>) { val x = 10 val y = 11 var max = 0 if (x > y) { max = x } else { max = y } println("最大值是:$max") } ~~~ 运行结果 ``` 最大值是:11 Process finished with exit code 0 ``` 同样,如果“操作1”、“操作2”只有一行语句,我们也可以省略大括号,采用如下形式: ``` if(条件表达式) //操作1 else //操作2 ``` 所以,我们可以对上面代码做如下修改: ~~~ fun main(args: Array<String>) { val x = 10 val y = 11 var max = 0 if (x > y) max = x else max = y println("最大值是:$max") } ~~~ 运行结果 ``` 最大值是:11 Process finished with exit code 0 ``` >[info]【注意】:在Kotlin中没有类似 true? 1: 0 这样的三元表达式。对应的写法是使用 if else 语句——`if(true) 1 else 0`,在 Kotlin 中,if 是一个表达式,即它会返回一个值。 因此就不需要三元运算符(条件 ? 然后 : 否则),因为普通的if 就能胜任这个角色。 比较特别的,**在Kotlin里面,针对if…else语句,还可以有返回值,然后可以把if…else的返回值赋值给某一个变量**,也就是可以有如下结构: ``` 变量 =if(条件表达式){ //返回值1 }else{ //返回值2 } ``` 如果满足条件,变量被赋值为返回值1,不满足条件,变量被赋值为返回值2。这里是把{}看成了Lambda表达式,Lambda表达式的最后一行表示Lambda表达式的结果。我们在后面章节才去讲解Lambda表达式,所以想理解Kotlin这个特性还是有些难度,我们可以先留个印象,学完Lambda表达式,我们回头在看。针对上面案例,我们可以做如下变换: ~~~ fun main(args: Array<String>) { val x = 10 val y = 11 var max = 0 max = if (x > y) x else y println("最大值是:$max") } ~~~ 运行结果 ``` 最大值是:11 Process finished with exit code 0 ``` 这也看成是kotlin中的三目运算符,语法格式如下`判断条件 ? 表达式1 : 表达式2`,就如上面代码中的` max = if (x > y) x else y` 比较特别的,在Kotlin里面,**“条件表达式”还可以用in关键字去表示元素是否在区间或者是否在集合中**,看如下案例: ~~~ fun main(args: Array<String>) { val range = 1..8 val list = listOf(1, 2, 3, 4, 5, 6, 7, 8) val x = 5 if (x in range) { println("x 在区间里面") } if (x in list) { println("x 在集合里面") } } ~~~ 运行结果 ``` x 在区间里面 x 在集合里面 Process finished with exit code 0 ``` ### **if…else…if语句** if…else…if语句,描述的是,如果条件满足1,就执行操作1,如果满足条件2,就执行操作2,如果满足条件3,就执行操作3等等。if…else…if语句的语法结构如下: ``` if(条件表达式1){ //操作1 }else if(条件表达式2){ //操作2 }else if(条件表达式3){ //操作3 } .......... else{ } ``` 条件表达式1,2,3…:必选参数可以是Boolean型变量或者返回结果为Boolean型的表达式。 操作1, 2,3…,可选参数,任意的代码语句。 我们通过一个案例简单演示下,参考代码: ~~~ fun main(args: Array<String>) { val score = 99 if (score >= 85 && score <= 100) { println("评级为:优") } else if (score >= 70 && score < 85) { println("评级为:良") } else if (score >= 60 && score < 69) { println("评级为:中") } else if (score < 60) { println("评级为:差") } } ~~~ 运行结果 ``` 评级为:优 Process finished with exit code 0 ```