Kotlin语法基础之控制流

Kotlin 的控制流与 Java 的控制流基本相同,只是使用 when 代替了 switch。当然,在 Kotlin中,if 和 when 不仅仅可以作为语句使用,还可以作为表达式使用,这些内容会在本节详细讲解。

条件语句

在 Kotlin 中,if 语句本身就是表达式,有返回值,因此,Kotlin 并不需要像 Java 那样提供三元操作符(condition ?then: else)。下面是传统的 if 条件语句的用法。

var a:Int = 20
var b = 30
var max: Int
if (a < b) max = b
var min: Int
if (a > b) {
 min = a
} else {
 min = b
} 

如果想将 if 语句作为表达式使用,那么可以按下面的代码形式编写 if 语句。如果 if 或 else后面是代码块,那么最后一个表达式是返回值。

var a = 20
var b = 30
val max = if (a > b) a else b
println(max)
// if else 后面是一个代码块,最后一个表达式将作为返回值
val min = if (a > b) {
 print("Choose a")
 a // 返回值
} else {
 print("Choose b")
 b // 返回值
} 

when 语句

在 Kotlin 中,when 替换了 C 语言风格的 switch 语句。标准的 when 语句的用法如下:

var x = 1
when (x)
{
 1 -> {
 println("x == 1")
 println("hello world")
 }
 2 -> print("x == 2")
 else -> {
 print("x is neither 1 nor 2")
 }
} 

使用 when 语句时,应注意以下几点:

  • when 语句会根据传入的值(这里是 x)寻找第一个满足条件的分支,找到后执行分支的语句。
  • 如果分支中多于一条语句,要用{…}。
  • 满足条件的分支执行后,会自动终止 when 语句的执行,因此,并不需要像 switch 语句那样每一个 case 语句都加上 break。

when 与 if 一样,既可以作为语句使用,也可以作为表达式使用。如果是后者,when 语句的第一个满足条件的分支的最后一个表达式就是 when 表达式的返回值。

var x = 1
var m = when (x) {
 1 -> {
 println("x == 1")
 20
 }
 2 -> {
 print("x == 2")
 60
 }
 else -> {
 print("x is neither 1 nor 2")
 40
 }
}
println(m) // m 的值是 20 

如果多个分支条件执行的代码都一样,可以在一个分支用逗号(,)分隔多个条件,代码如下:

var x = 1
when (x) {
 1,2 -> {
 println("已经符合条件")
 }
 3 -> {
 println("不符合条件")
 }
 else -> {
 println("条件未知")
 }
} 

如果要执行相同代码的条件比较多,或无法枚举,可以使用 in 关键字确定一个范围,代码如下:

var n = 25
when(n)
{
 in 1..10 ->println("满足条件")
 in 11.. 20 ->println("不满足条件")
 !in 30..60 ->println("hello world") // !in 表示不在这个范围内
 else->println("条件未知")
} 

其实,when 中的分支条件不仅可以是常量,还可以是任意表达式。例如,下面的代码分支条件就是一个函数。

fun getValue(x:Int):Int
{
 return x * x
}
fun main(args: Array<String>)
{
 var n = 4
 when(n)
 {
 getValue(2)->println("满足条件")
 getValue(3)->println("不满足条件")
 else->println("条件未知")
 }
} 

for 循环

在 Kotlin 中,for 循环可以直接枚举集合中的元素,也可以按集合索引来枚举元素。下面的语法是使用迭代器(iterator)枚举集合中的所有元素。

for (item in collection) print(item) 

下面的代码使用这种方式枚举了数组中的所有元素值。

var arr = intArrayOf(2,4,6,8,10)
for (item: Int in arr) {
 println(item)
} 

下面的代码使用索引枚举数组中的元素值。

var arr = intArrayOf(2, 4, 6, 8, 10)
for (i in arr.indices) {
 println("arr[$i] = " + arr[i])
} 

执行这段代码,会输出如下结果。

arr[0] = 2
arr[1] = 4
arr[2] = 6
arr[3] = 8
arr[4] = 10

其实要想输出上面的结果,还有更简单的写法,就是在循环时,同时对索引和元素值进行 循环,代码如下:

var arr = intArrayOf(2, 4, 6, 8, 10)
// index 是索引,value 是当前的数组元素值
for ((index, value) in arr.withIndex()) {
 println("arr[$index] = " + value)
} 

while 循环

Kotlin 中的 while 循环和 Java 中的 while 循环是一样的,也分为 while 和 do…while,代码如下:

var i= 0
while(i++ < 10){
 println(i)
}
do{
 if(i == 6)
 continue
 println(i)
 if(i == 5)
 break
}while(--i > 0)

do…while 循环中使用了 continue 和 break,这两个语句在 for 循环中同样可以使用。continue 是为了忽略当前循环 continue 后面的所有语句,继续从下一次循环开始。break 是为了终结当前循环,并跳出循环。这一点和 Java 完全一样。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python

五、解析库之re模块

re模块 一:什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。(...

39870
来自专栏海天一树

小朋友学C语言(23):二进制与十进制之间的转换

在学本节之前,请先复习 小朋友学C语言(17):二进制 一、二进制转换为十进制的C语言代码 #include <stdio.h> #include <strin...

44050
来自专栏一个会写诗的程序员的博客

《Kotin 极简教程》第8章 函数式编程(FP)(2)

好了亲,前文中我们在函数式编程的世界里遨游了一番,现在我们把思绪收回来,放到在Kotlin中的函数式编程中来。

10620
来自专栏开源优测

[快学Python3]循环控制

概述 本节我们主要介绍Python中的循环控制的使用。 for循环 在Python中for循环可以遍历任何序列,例如元组、列表、字符串、字典、集合等等。 先看下...

281100
来自专栏飞扬的花生

正则表达式的总结

      经常用到正则表达式,以前很懒总是让同事帮我写,最近有时间稍微复习了下正则表达式的基本语法,发现网络上的这类知识是琳琅满目,通过去糟粕取精华后总结了这...

23680
来自专栏Python爱好者

Java基础笔记03

18280
来自专栏技术博客

C#字符串(字节)的长度

顺便看一下Sql Server中char nchar varchar  nvarchar

79420
来自专栏CodingToDie

Python学习(五):函数

第5 章 函数 Table of Contents 函数调用 数据类型转换 定义函数 空函数 返回多个值 tuple 函数调用 Python内置了很多有用的函数...

47850
来自专栏云瓣

JS中遍历语法的比较

for循环 JavaScript 提供多种遍历语法。最原始的写法就是for循环。 let arr = [1,2,3,4,5]; for (var index ...

44840
来自专栏程序生活

2017/6/8-python正则表达式的使用

#match()函数的使用 #\w匹配字母数字及下划线 # \s匹配任意空白字符,等价于 [\t\n\r\f]. # \d匹配任意数字,等价于 [0-9] ...

36770

扫码关注云+社区

领取腾讯云代金券