Kotlin开发安卓APP笔记-条件语句和循环语句
2017-12-14 14:00
375 查看
继续昨天的数据类型,今天继续学习条件语句和循环语句,争取每天更新一篇(礼拜一到礼拜五)
也可以把if的结果赋值给一个变量,比如
平常用Java写三元运算符是这样的
而kotlin有了这个特性就可以这样写
而kotlin就可以通过in运算符来简化这一写法,区间格式为x..y
when 既可以被当做表达式使用也可以被当做语句使用。如果它被当做表达式,符合条件的分支的值就是整个表达式的值,类似于java的 switch 操作符。其最简单的形式如下:
when还可以将多个条件放在一起,用逗号“,”分割,例如:
当然when也可以使用in区间符以及逻辑运算符,还能用于检测数值是否存在于集合或者数组之中
对比下面Kotlin的循环
同Java一样,kotlin的for也不只有这样一个功能,kotlin的for也能像Java一样可以对任何提供迭代器(iterator)的对象进行遍历,例如:
或者
注意这种”在区间上遍历”会编译成优化的实现而不会创建额外对象。
或者你可以用库函数 withIndex:
对集合进行迭代
输出结果:
do…while 循环 对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。
do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。
return。默认从最直接包围它的函数或者匿名函数返回。
break。终止最直接包围它的循环。
continue。继续下一次最直接包围它的循环。
在循环中 Kotlin 支持传统的 break 和 continue 操作符。
现在,我们可以用标签限制 break 或者continue:
标签限制的 break 跳转到刚好位于该标签指定的循环后面的执行点。 continue 继续标签指定的循环的下一次迭代。
这个 return 表达式从最直接包围它的函数即 foo 中返回。 (注意,这种非局部的返回只支持传给内联函数的 lambda 表达式。) 如果我们需要从 lambda 表达式中返回,我们必须给它加标签并用以限制 return。
现在,它只会从 lambda 表达式中返回。通常情况下使用隐式标签更方便。 该标签与接受该 lambda 的函数同名。
或者,我们用一个匿名函数替代 lambda 表达式。 匿名函数内部的 return 语句将从该匿名函数自身返回
当要返一个回值的时候,解析器优先选用标签限制的 return,即
意为”从标签 @a 返回 1”,而不是”返回一个标签标注的表达式 (@a 1)”。
if和else
同Java一样,一个if包含一个布尔表达式和一条或多条语句。例如:var a:Int=1 if(a==1){ tv.setText("a=1") }else{ tv.setText("a≠1") }
也可以把if的结果赋值给一个变量,比如
var a:Int=1 var result=if(a==1){ "a=1" }else{ "a≠1" } tv.setText(result)
平常用Java写三元运算符是这样的
String result=b?"真":"假";
而kotlin有了这个特性就可以这样写
var result=if(b)"真" else "假"
区间in
如果要判断变量a是否在6-10之间,Java的写法是if(a<=10&&a>=6){ }
而kotlin就可以通过in运算符来简化这一写法,区间格式为x..y
if(a in 6..10){ }
与或非
同Java一样,kotlin也支持与或非,例var a=1 var b=2 print(a==1&&b==2) //打印true print(a==1&&b==1) //打印false print(a==1||b==2) //打印true print(a==1||b==1) //打印true print(a!=1)//打印false print(a!=2)//打印true
When 表达式
when 将它的参数和所有的分支条件顺序比较,直到某个分支满足条件。when 既可以被当做表达式使用也可以被当做语句使用。如果它被当做表达式,符合条件的分支的值就是整个表达式的值,类似于java的 switch 操作符。其最简单的形式如下:
when (x) { 1 -> print("x == 1") 2 -> print("x == 2") else -> { // else相当于switch的default print("x 不是 1 ,也不是 2") } }
when还可以将多个条件放在一起,用逗号“,”分割,例如:
when(x){ 1,2 -> print("1或者2") 3 -> print("3") else -> { print("其他") } }
当然when也可以使用in区间符以及逻辑运算符,还能用于检测数值是否存在于集合或者数组之中
when(x){ in 1..5 -> println("在1到5之间") !in 1..5 -> println("不在1到5之间") in arr -> println("存在于数组arr中") }
for循环
先看看Java的循环打印10次for (int i=0;i<10;i++){ System.out.println(10); }
对比下面Kotlin的循环
for (i in 1..10){ println(i) }
同Java一样,kotlin的for也不只有这样一个功能,kotlin的for也能像Java一样可以对任何提供迭代器(iterator)的对象进行遍历,例如:
for (item in collection) print(item)
或者
for (item: Int in ints) { // …… }
注意这种”在区间上遍历”会编译成优化的实现而不会创建额外对象。
或者你可以用库函数 withIndex:
for ((index, value) in array.withIndex()) { println("the element at $index is $value") }
对集合进行迭代
val items = listOf("猫客", "技术", "论坛","bestmk.cn") for (item in items) { println(item) } for (index in items.indices) { println("item at $index is ${items[index]}") }
输出结果:
猫客 技术 论坛 bestmk.cn item at 0 is 猫客 item at 1 is 技术 item at 2 is 论坛 item at 3 is bestmk.cn
while 与 do…while 循环
while是最基本的循环,结构如下:while( 布尔表达式 ) { //循环内容 }
do…while 循环 对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。
do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。
do { //代码语句 }while(布尔表达式);
返回和跳转
Kotlin 有三种结构化跳转表达式:return。默认从最直接包围它的函数或者匿名函数返回。
break。终止最直接包围它的循环。
continue。继续下一次最直接包围它的循环。
在循环中 Kotlin 支持传统的 break 和 continue 操作符。
for (i in 1..10) { if (i==3) continue // i 为 3 时跳过当前循环,继续下一次循环 println(i) if (i>5) break // i 为 6 时 跳出循环 }
Break 和 Continue 标签
在 Kotlin 中任何表达式都可以用标签(label)来标记。 标签的格式为标识符后跟 @ 符号,例如:abc@、fooBar@都是有效的标签。 要为一个表达式加标签,我们只要在其前加标签即可。loop@ for (i in 1..100) { // …… }
现在,我们可以用标签限制 break 或者continue:
loop@ for (i in 1..100) { for (j in 1..100) { if (……) break@loop } }
标签限制的 break 跳转到刚好位于该标签指定的循环后面的执行点。 continue 继续标签指定的循环的下一次迭代。
标签处返回
Kotlin 有函数字面量、局部函数和对象表达式。因此 Kotlin 的函数可以被嵌套。 标签限制的 return 允许我们从外层函数返回。 最重要的一个用途就是从 lambda 表达式中返回。回想一下我们这么写的时候:fun foo() { ints.forEach { if (it == 0) return print(it) } }
这个 return 表达式从最直接包围它的函数即 foo 中返回。 (注意,这种非局部的返回只支持传给内联函数的 lambda 表达式。) 如果我们需要从 lambda 表达式中返回,我们必须给它加标签并用以限制 return。
fun foo() { ints.forEach lit@ { if (it == 0) return@lit print(it) } }
现在,它只会从 lambda 表达式中返回。通常情况下使用隐式标签更方便。 该标签与接受该 lambda 的函数同名。
fun foo() { ints.forEach { if (it == 0) return@forEach print(it) } }
或者,我们用一个匿名函数替代 lambda 表达式。 匿名函数内部的 return 语句将从该匿名函数自身返回
fun foo() { ints.forEach(fun(value: Int) { if (value == 0) return print(value) }) }
当要返一个回值的时候,解析器优先选用标签限制的 return,即
return@a 1
意为”从标签 @a 返回 1”,而不是”返回一个标签标注的表达式 (@a 1)”。
相关文章推荐
- Kotlin开发安卓APP笔记实战-写个简易记事本(需求分析)
- Kotlin开发安卓APP笔记实战-写个简易记事本(逻辑)
- Kotlin开发安卓APP笔记-协程(代替线程)
- 《转》Kotlin开发安卓APP笔记-函数和lambda表达式(3)
- Kotlin开发安卓APP笔记-类和对象(1)
- Kotlin开发安卓APP笔记-函数和lambda表达式(2)
- Kotlin开发安卓APP笔记-创建工程及基础语法
- [Kotlin]Kotlin学习笔记(二):Kotlin中流程控制语句的学习(条件、跳转、循环)
- Kotlin开发安卓APP笔记-类和对象(2)
- Kotlin开发安卓APP笔记-数据类型
- Kotlin开发安卓APP笔记-函数和lambda表达式(1)
- Kotlin开发安卓APP笔记-接口
- <<Python基础教程>>学习笔记 | 第05章 | 条件、循环和其他语句
- python学习笔记——第五章 条件、循环和其他语句
- python学习笔记之四:条件,循环和其他语句
- Python学习笔记(二):条件控制语句与循环语句及常用函数的用法
- Python学习笔记-第五章 条件、循环和其他语句(下)
- Swift笔记:For-In、While 循环、if条件语句
- GO语言学习笔记1(基本概念,条件循环语句)
- python学习笔记5-条件,循环和其他语句