Kotlin when条件语句,when条件语句是一种很常用的选择语句。和if条件语句不同,它只能针对某个表达式的值做出判断,从而决定程序执行哪一段代码。例如,在程序中使用数字1~7来表示星期一到星期日,如果想根据某个输入的数字来输出对应的中文格式的星期值,可以通过下面一段伪代码来描述:

对于上面的伪代码的描述,大家可能会想到用刚学过的if…else if…else语句来实现,但是由于判断条件比较多,实现起来代码过长,不便于阅读。Kotlin中提供了一种when语句来实现这种需求,在when语句中使用when关键字来描述一个表达式,当表达式的值和某个目标值匹配时,会执行“->”后面的语句。具体实现的伪代码如下:

上面改写后的伪代码描述了when语句的基本语法格式,具体如下:

在上面的格式中,when语句将表达式的值与每个目标值进行匹配,如果找到了匹配的值,会执行对应“->”后面的语句,如果没找到任何匹配的值,就会执行else后面的语句。

在when语句中,使用when关键字描述的不仅可以是一个表达式也可以是一条语句,如果它被当作表达式,则符合条件的目标值就是整个表达式的值,如果它被当作语句时,则忽略个别目标值,每一个分支可以是一个代码块,它的值是代码块中最后的表达式的值。如果其他目标值都不满足条件,则会求else分支中的值。如果when作为一个表达式使用时,则必须有else分支,除非编译器能够检测出的所有可能情况都已经覆盖了。接下来我们通过一个案例演示根据数字输出中文格式的星期,具体代码如下所示。

上述代码中,由于变量week的值为3,整个when语句判断的结果满足第7行的条件,因此输出“星期三”,上述代码中的else语句用于处理与前面的目标值都不匹配的情况,将第3行的代码替换为“var week:Int=10”,再次运行程序,则会输出“输入的数字不正确……”。

在使用when语句的过程中,如果多个目标值后面的执行语句是一样的,则可以把多个目标值放在一起,用逗号隔开。例如要判断一年中某个月份为什么季节,使用数字1~12来表示一年中的12个月份,当输入的数字为12、1、2时就视为冬季,当输入的数字为3、4、5时就视为春季,当输入的数字为6、7、8时就视为夏季,当输入的数字为9、10、11时就视为秋季,否则就提示“没有这个月份,请重新输入……”。接下来我们通过一个案例来实现上面的描述情况,具体代码如下所示。

when语句也可以用来取代if…else if…else语句,如果when语句中不提供参数,所有的分支条件都是简单的布尔表达式,则当一个分支条件为真时可执行该分支后面的执行语句,具体代码如下所示。

a小于b

在上述代码中可以看到,定义了两个整型变量分别是a、b,变量a的初始值为7,变量b的初始值为8,在when语句中,当a>b为true时,会执行“a>b”后面的语句,当a<b为true时,会执行“a<b”后面的语句,否则会执行else后面的语句。