kotlin学习day8:表达式和ranges
来源:互联网 发布:国际版的中国软件 编辑:程序博客网 时间:2024/06/07 06:05
先创建一个简单的集合,方便我们进行演示
val mList = listOf(1, 2, 3, 4)
1.if表达式
Kotlin中一切都是表达式,也就是说一切都可以返回一个值。首先if语句我们可以像Java中那样使用它:
if (condition) { //do something } else if (condition) { //do something } else { //do something }
其次,我们也可以把结果赋值给一个变量:
var z = if(condition) x else y
所以 if 表达式总是返回一个value。如果一个分支返回了Unit,那整个表达式也将
返回Unit,它是可以被忽略的,这种情况下它的用法也就跟一般Java中的 if 条件
一样了。
//if条件表达式 mList.forEach { if (it > 2) Log.i(TAG, it.toString()) else toast(it.toString()) }
运行结果:
09-10 20:02:57.272 31586-31586/com.example.lbjfan.kotlindemo I/LBJFAN: 309-10 20:02:57.273 31586-31586/com.example.lbjfan.kotlindemo I/LBJFAN: 4
2.When表达式
when表达式类似于Java中的switch/case语句,但是更加强大,该表达式会试图去匹配所有可能的分支,然后找到满意的一个语句,执行右边的表达式。与Java中的表达式不同的是他可以匹配任意类型的参数,并且分支也可以是一个条件。我们也可以增加一个else语句,当没有任何语句匹配时,该语句会执行!
//When条件表达式:简单的匹配Int类型 mList.forEachIndexed { index, value -> when (value) { //执行最先匹配的一条语句 //is Int -> Log("Value is Int") 1, 2 -> Log.i(TAG, "index:$index--value:$value") 3 -> Log.i(TAG, "value:$value--value:$index") else -> { Log.i(TAG, "else value:$value--value:$index") } } }
运行结果:
09-10 20:11:40.148 8634-8634/com.example.lbjfan.kotlindemo I/LBJFAN: index:0--value:109-10 20:11:40.148 8634-8634/com.example.lbjfan.kotlindemo I/LBJFAN: index:1--value:209-10 20:11:40.148 8634-8634/com.example.lbjfan.kotlindemo I/LBJFAN: value:3--value:209-10 20:11:40.149 8634-8634/com.example.lbjfan.kotlindemo I/LBJFAN: else value:4--value:3
//when条件表达式任意类型,且判断条件是一个表达式 val mViewList = listOf(TextView(this), Button(this), ImageView(this)) mViewList.forEachIndexed { index, view -> when (view) { //执行完条件语句会自动转型,不用像Java做类型转换 is TextView -> Log("index$index:is TextView") is Button -> Log("index$index:is Button") is ImageView -> Log("index$index:is ImageView") else -> { Log(" is Other View") } } }
运行结果:
09-10 20:11:40.157 8634-8634/com.example.lbjfan.kotlindemo I/LBJFAN: index0:is TextView09-10 20:11:40.157 8634-8634/com.example.lbjfan.kotlindemo I/LBJFAN: index1:is TextView09-10 20:11:40.157 8634-8634/com.example.lbjfan.kotlindemo I/LBJFAN: index2:is ImageView
3.for循环
虽然Kotlin中有很多功能强大的操作集合的函数操作符,但是如果去查看源码的话,不难发现,全都是基于最简单的迭代!
//直接获取item for (value in mList) { Log("value:$value") }
运行结果:
09-10 20:25:39.620 21866-21866/com.example.lbjfan.kotlindemo I/LBJFAN: value:109-10 20:25:39.620 21866-21866/com.example.lbjfan.kotlindemo I/LBJFAN: value:209-10 20:25:39.621 21866-21866/com.example.lbjfan.kotlindemo I/LBJFAN: value:309-10 20:25:39.621 21866-21866/com.example.lbjfan.kotlindemo I/LBJFAN: value:4
//使用index获取item for (index in 0..mList.size - 1) { Log("index:$index--value:${mList.get(index)}") }
运行结果:
09-10 20:25:39.621 21866-21866/com.example.lbjfan.kotlindemo I/LBJFAN: index:0--value:109-10 20:25:39.621 21866-21866/com.example.lbjfan.kotlindemo I/LBJFAN: index:1--value:209-10 20:25:39.621 21866-21866/com.example.lbjfan.kotlindemo I/LBJFAN: index:2--value:309-10 20:25:39.621 21866-21866/com.example.lbjfan.kotlindemo I/LBJFAN: index:3--value:4
4.While和do/while循环
Kotlin中的While和do/while语句和Java中的一样
while语句:
//While语句var x = 6while (x > 0) { Log("x:$x") x--}
运行结果:
09-10 20:31:45.286 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: x:609-10 20:31:45.286 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: x:509-10 20:31:45.286 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: x:409-10 20:31:45.286 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: x:309-10 20:31:45.286 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: x:209-10 20:31:45.287 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: x:1
do/while语句:
//do/while语句var y = 6do { Log("y:$y") y-- } while (y > 0)
运行结果:
09-10 20:31:45.287 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: y:609-10 20:31:45.287 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: y:509-10 20:31:45.287 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: y:409-10 20:31:45.287 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: y:309-10 20:31:45.287 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: y:209-10 20:31:45.287 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: y:1
5.Ranges
range表达式使用..操作符,他是被定义实现了一个rangTo方法,可以帮助我们使用很多富有创造性的方式去简化我们的代码:例如:
if (x >= 0 && x <= 10) { Log("x:$x") }
等价于:
if (x in 0..10) { Log("x:$x") }
Range 被定义为可以被比较的任意类型,但是对于数字类型,比较器会通过转换
它为简单的类似Java代码来避免额外开销的方式来优化它。数字类型的 ranges 也
可以被迭代,编译器会转换它们为与Java中使用index的for循环的相同字节码的方
式来进行优化。
range默认自增长,因此下面的代码不会做任何事情
if (x in 10..0) { Log("x:$x") }
对应的,要想使上面语句执行,我们可以使用downTo函数
if (x in 10 downTo 0) { Log("x:$x") }
运行结果:
09-10 20:48:43.353 11479-11479/com.example.lbjfan.kotlindemo I/LBJFAN: 309-10 20:48:43.353 11479-11479/com.example.lbjfan.kotlindemo I/LBJFAN: 209-10 20:48:43.353 11479-11479/com.example.lbjfan.kotlindemo I/LBJFAN: 109-10 20:48:43.353 11479-11479/com.example.lbjfan.kotlindemo I/LBJFAN: 0
我们也可以在range中使用step来定义一个到一个值的不同的空隙
for (it in 1..4 step 3) { Log(it.toString()) }
运行结果:
09-10 20:52:44.699 15648-15648/com.example.lbjfan.kotlindemo I/LBJFAN: 109-10 20:52:44.699 15648-15648/com.example.lbjfan.kotlindemo I/LBJFAN: 4
for (it in 4 downTo 1 step 2) { Log(it.toString()) }
运行结果:
09-10 20:52:44.700 15648-15648/com.example.lbjfan.kotlindemo I/LBJFAN: 409-10 20:52:44.700 15648-15648/com.example.lbjfan.kotlindemo I/LBJFAN: 2
6.until函数
与range表达式不同的是until遍历时会跳过最后一个值:
for (it in 1 until 4) { Log(it.toString()) }
运行结果:
09-10 20:58:22.463 21094-21094/com.example.lbjfan.kotlindemo I/LBJFAN: 109-10 20:58:22.463 21094-21094/com.example.lbjfan.kotlindemo I/LBJFAN: 209-10 20:58:22.463 21094-21094/com.example.lbjfan.kotlindemo I/LBJFAN: 3
如果不使用until函数,我们使用index遍历数组时:
//使用index获取item for (index in 0..mList.size - 1) { Log("index:$index--value:${mList.get(index)}") }
使用until函数
for (index in 0 until mList.size) { Log("index:$index--value:${mList.get(index)}") }
- kotlin学习day8:表达式和ranges
- Kotlin基础教程-Ranges表达式
- Kotlin学习(十三): 集合(Collections)和范围(Ranges)
- Kotlin学习之object表达式和声明
- 学习kotlin第11天_函数和lambda表达式
- Kotlin学习之-5.11 对象表达式和声明
- Kotlin学习之-6.2 高阶函数和lambda表达式
- Kotlin学习(九): 扩展(Extensions)和This表达式
- Kotlin学习(十二): 函数、高级函数和Lambda表达式
- kotlin学习笔记——过程控制和Range表达式
- 黑马程序员 java学习笔记 Day8:正则表达式
- Kotlin-27.区间/范围(Ranges)
- Java学习----day8——(1)包和导入
- java学习笔记day8
- Android学习笔记day8
- java学习day8
- python学习日志--day8
- Kotlin 其他(三) --- 区间(Ranges)
- day02-语言基础(1)
- 【洛谷1073】【NOIP2009t3】最优贸易
- Graham算法的实现
- Work4
- LeetCode-002 Add Two Numbers
- kotlin学习day8:表达式和ranges
- Gradle学习系列之七——依赖管理
- 连载:1.软考之目的
- ucos-iii学习之单任务应用程序
- MySQL(3)常见使用命令:数据表及表结构
- jpgraph 在linux上遇到的错误
- Work5
- 链接oracle工具类
- 二部图(不存在奇数环的图)