Kotlin学习笔记2-3 基础-流程控制语句

来源:互联网 发布:java爬虫和python爬虫 编辑:程序博客网 时间:2024/05/29 14:07

流程控制语句:if, when, for, while

Kotlin官网:Basics-Control Flow

if表达式

Kotlin中if是“表达式”而不是“代码块”,也就是有值的。Kotlin中没有三目运算符,被if表达式取代了。
例如:

//普通的写法,和Java相同,只有一行时可以省略大括号var max = a if (a < b) max = b// 普通的if-elsevar max: Intif (a > b) {    max = a} else {    max = b}// 作为表达式为变量赋值val max = if (a > b) a else b

if作用域内可以写其他的语句,最后一行的值作为if表达式的值

例如:

val a = 2;val b = 5;println(if (a > b) {    println("Choose a")    a} else {    println("Choose b")    b})

输出结果:

Choose b5

如果写成:

val a = 10;val b = 5;println(if (a > b) {    a    println("Choose a")} else {    b    println("Choose b")})

输出结果:

Choose akotlin.Unit

因为if的最后一行作为表达式的值,println函数返回的是Unit,所以打印出来的就是Unit对象。

当if作为表达式需要有值时必须要else。这个也好理解,作为表达式时必须有值,if条件不满足时必须由else提供一个结果。

when表达式

when取代了switch语句,和if类似,也是一个表达式,可以有值。

和switch类似,也是由上而下逐条检查是否满足条件。

可以使用else作为分支,类似于switch中的default,当所有其他分支不满足时执行。

和if相同,如果作为表达式获取值时必须由else,这和if的道理相同,在所有条件不满足时需要有一个兜底的。

如果有多个条件执行相同的语句,可以将多个条件写到同一分支,使用”,”逗号分割。

和switch不同的是,when可以使用任意表达式作为分支,而不仅限于常量。

when (x) {    0, 1 -> print("x == 0 or x == 1")    2 -> print("x == 2")    foo() ->print("x == foo")    else -> print("otherwise")}

in range区间内判断作为分支

when (x) {    in 1..10 -> print("x is in the range")    in validNumbers -> print("x is valid")    !in 10..20 -> print("x is outside the range")    else -> print("none of the above")}

可以用is Type 类型检查语句作为分支。而且在类型检查后会自动转型成对应类型,无需再显式的声明。

fun hasPrefix(x: Any) = when(x) {    is String -> x.startsWith("prefix")    else -> false}

when语句可以用来替代if-else if,此时不写when的参数,默认为Boolean型,在分支为true时会执行分支。

when {    x.isOdd() -> print("x is odd")    x.isEven() -> print("x is even")    else -> print("x is funny")}

for循环

for可以循环任何可以提供iterator的对象,这点和Java中的foreach循环Iterable原理相同。和Java相同,只有一行时可以省略大括号。

//单行for (item in collection) print(item)s//代码块for (item: Int in ints) {    // ...}

对象满足以下条件可以使用for循环遍历
1. 提供iterator()方法,返回一个对象包含:
* 带有next()方法的成员或者拓展方法
* 带有hasNext()方法的成员或者拓展方法
2. 以上三个方法都有operator修饰

使用下标遍历时不会创建iterator对象

下标遍历数组:

for (i in array.indices) {    print(array[i])}

也可以使用lib中的withIndex方法

for ((index, value) in array.withIndex()) {    println("the element at $index is $value")}

while循环

while和do-while和Java完全相同

*do-while循环中,do{}作用域中的变量在while()条件判断内是可以访问的。

while (x > 0) {    x--}do {    val y = retrieveData()} while (y != null) // y is visible here!

循环中的中断和继续

Kotlin支持循环中使用break和continue,详见下章。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一层半别墅效果图 13万农村一层半别墅图片 半加器 半半歌 半醉半醒半浮生凤清歌 半半歌儿歌 半壶纱这首歌表达了什么意思 当恩怨各一半我怎么圈什么歌 半卷发型图片 半双工 半叶知秋凉作品 房分你一半叶非夜 一叶障目的后半句是什么 劫起封神 半叶知秋凉 诸天仗剑行 半叶知秋凉 我的房分你一半 叶非夜 我的房分你一半叶非夜 我的房租你一半叶非夜 我的房子分你一半叶非夜 客厅半吊顶装修效果图 吊顶热水器半包后悔 半吊顶 斜吊顶 层次吊顶 君莫邪 君邪异世 邪君君邪 异世君邪txt全文下载 异世君邪txt全集下载 异世君邪txt全集下载完 夜云溪帝君邪 隋末新君 邪情小生 邪妃来袭帝君的宠妻 梦幻宠物系统 君之邪魂 半吨兄弟 半吨兄弟个人资料 半吨天然气锅炉 半吨蒸汽锅炉 半吨是多少斤 圆周长的一半 坡度尺