For 循环

for 循环可以对任何提供迭代器(iterator)的对象进行遍历,语法如下:

for (item in collection) print(item)

循环体可以是一个代码块:

for (item: Int in ints) {// ……
}

如上所述,for 可以循环遍历任何提供了迭代器的对象。

如果你想要通过索引遍历一个数组或者一个 list,你可以这么做:

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

注意这种"在区间上遍历"会编译成优化的实现而不会创建额外对象。

或者你可以用库函数 withIndex:

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

实例

对集合进行迭代:

fun main(args: Array<String>) {val items = listOf("apple", "banana", "kiwi")for (item in items) {println(item)}for (index in items.indices) {println("item at $index is ${items[index]}")}
}

输出结果:

apple
banana
kiwi
item at 0 is apple
item at 1 is banana
item at 2 is kiwi

while 与 do...while 循环

while是最基本的循环,它的结构为:

while( 布尔表达式 ) {//循环内容
}

do…while 循环 对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。

do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。

do {//代码语句
}while(布尔表达式);

实例

fun main(args: Array<String>) {println("----while 使用-----")var x = 5while (x > 0) {println( x--)}println("----do...while 使用-----")var y = 5do {println(y--)} while(y>0)
}

输出结果:

fun main(args: Array<String>) {println("----while 使用-----")var x = 5while (x > 0) {println( x--)}println("----do...while 使用-----")var y = 5do {println(y--)} while(y>0)
}

输出结果:

5
4
3
2
1
----do...while 使用-----
5
4
3
2
1

返回和跳转

Kotlin 有三种结构化跳转表达式:

  • return。默认从最直接包围它的函数或者匿名函数返回。
  • break。终止最直接包围它的循环。
  • continue。继续下一次最直接包围它的循环。

在循环中 Kotlin 支持传统的 break 和 continue 操作符。

fun main(args: Array<String>) {for (i in 1..10) {if (i==3) continue  // i 为 3 时跳过当前循环,继续下一次循环println(i)if (i>5) break   // i 为 6 时 跳出循环}
}

输出结果:

1
2
4
5
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) returnprint(it)}
}

这个 return 表达式从最直接包围它的函数即 foo 中返回。 (注意,这种非局部的返回只支持传给内联函数的 lambda 表达式。) 如果我们需要从 lambda 表达式中返回,我们必须给它加标签并用以限制 return。

fun foo() {ints.forEach lit@ {if (it == 0) return@litprint(it)}
}

现在,它只会从 lambda 表达式中返回。通常情况下使用隐式标签更方便。 该标签与接受该 lambda 的函数同名。

fun foo() {ints.forEach {if (it == 0) return@forEachprint(it)}
}

或者,我们用一个匿名函数替代 lambda 表达式。 匿名函数内部的 return 语句将从该匿名函数自身返回

fun foo() {ints.forEach(fun(value: Int) {if (value == 0) returnprint(value)})
}

当要返一个回值的时候,解析器优先选用标签限制的 return,即

return@a 1

意为"从标签 @a 返回 1",而不是"返回一个标签标注的表达式 (@a 1)"。

注意总结:

正常循环:

for (i in 1..4) print(i) // 打印结果为: "1234"

如果你需要按反序遍历整数可以使用标准库中的 downTo() 函数:

for (i in 4 downTo 1) print(i) // 打印结果为: "4321"

也支持指定步长:

for (i in 1..4 step 2) print(i) // 打印结果为: "13"for (i in 4 downTo 1 step 2) print(i) // 打印结果为: "42"

如果循环中不要最后一个范围区间的值可以使用 until 函数:

for (i in 1 until 10) { // i in [1, 10), 不包含 10println(i)
}

Kotlin 循环控制(七)相关推荐

  1. 思维导图|kotlin 循环控制

    大家好,我是青空.今天给大家介绍kotlin循环控制. 文末可领取20+份大厂面试题 kotlin 中循环控制主要是 for 和 while 两种方式. for 循环 iterator迭代器 for ...

  2. 快速学习Kotlin(七)集合与操作符

    集合是我们在代码编写时常用的操作数据的方式之一,具有非常重要的作用. 在kotlin中也有集合的概念,kotlin中的集合一般有三种:List.Map以及Set三种.而这三种集合每种又可以分为可变集合 ...

  3. Kotlin第七章: Android四大组件

    1. 四大组件 四大组件是每一个Android人必须要会,要掌握的知识点,因为他们是我们在日常开发工作中打交道最频繁的组件,而且他们四个在不同的领域扮演着极其重要的角色. Activity: 负责用户 ...

  4. 从Java到Kotlin(三)

    本篇文章主要对比Java跟Kotlin中的类和接口的写法. 目录 一.类的声明 二.构造函数 三.函数的参数 四.创建类的实例 五.数据类 六.枚举类 七.属性 八.内部类 九.可见性修饰符 十.继承 ...

  5. 从Java到Kotlin(五)

    函数与Lambda表达式 目录 一.函数声明与调用 二.参数和返回值 三.单表达式函数 四.函数作用域 五.泛型函数 六.尾递归函数 七.中缀表示法 八.Lambda表达式的语法 九.高阶函数与Lam ...

  6. 【Kotlin】Kotlin 教程

    kotlin 教程 前言 什么是kotlin 什么是Java? kotlin 与 Java有什么区别 kotlin 的特点 Java的特点 kotlin 的历史 JAVA的历史 kotlin 的优势 ...

  7. 一文带你快速掌握Kotlin核心技能

    目录 写在前面 一.Kotlin概述 1.1.Kotlin简介 1.2.Kotlin构建流程 1.3.Kotlin环境配置 二.Kotlin必备基础 2.1.基本数据类型 2.2.数组 2.3.集合 ...

  8. 学习Kotlin(七)反射和注解

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  9. Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段

    Kotlin 学习笔记(七)-- Kotlin类与对象之属性与字段 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- ...

最新文章

  1. 单击时选择HTML文本输入中的所有文本
  2. subList生成的列表和原列表的对比
  3. export TERM=xterm导致终端reset命令失效
  4. 李争——一个骨子里是极客的程序员
  5. Linux 文件系统与设备文件系统 (一)—— udev 设备文件系统
  6. android app 适应不同大小屏幕_移动APP测试:Android屏幕适配问题二
  7. 网站的服务器分哪几种,服务器有哪几种分类?_服务器可分为四种类型
  8. 利用Mesos构建多任务调度系统
  9. msg_p!=(void*) 0 --消息邮箱(点滴学习)
  10. 蓝桥杯 ADV-202算法提高 最长公共子序列(动态规划)
  11. 数据库系统概论-关系数据库
  12. ws2_32.dll下载-ws2_32.dll调用失败如何修复
  13. 谷歌翻译配置hosts
  14. Windows 微软雅黑(Microsoft YaHei)+ Monaco 字体整合方案
  15. 恒星播放器 for Mac(万能视频播放器)
  16. SQL注入漏洞--2
  17. word文档中怎么输入公式符号
  18. 7.5 《丰田模式》阅读笔记和感悟
  19. Word文档生成神器:开源项目poi.tl使用介绍
  20. 如何学习解剖学的简单方法

热门文章

  1. thinkphp框架的优缺点
  2. 4-3-串的块链存储结构-串-第4章-《数据结构》课本源码-严蔚敏吴伟民版
  3. Objective-C路成魔【11-多态性、动态类型和动态绑定】
  4. js中 new Date()使用说明
  5. [教程]centos下设置网卡
  6. 程序路漫漫兮,上下而求索
  7. linux打包java jar_在linux环境下修改可运行jar包配置并重新打包
  8. 布隆过滤器误判_布隆过滤器原理
  9. grep 判断不是正则的_Shell—正则表达式(grep命令、sed工具)
  10. 设计灵感|美容护肤主题,图文排版在Banner中的正确打开位置!