标签的声明方式:标签名++"@",如:abc@
标签的引用方式:"@"++标签名,如:@abc

Kotlin中标签的含义和Java中的基本一致,都是为了方便跳转到指定位置,常和 breakcontinue 搭配使用。但是Kotlin中的标签还可以和 return 搭配使用,表示在标签处返回。

Break和Continue

举例如下:

fun main(args: Array<String>) {for (i in 1..4) {for (j in 1..4) {if (i == 2 && j == 2) {break}println("i = $i, j = $j")}}
}

以上代码表示中的 break 仅仅是跳出了内层循环,也就是当 i=2,j=2 时终止内层循环,然后 i 加 1 继续循环。打印结果如下:

i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 1, j = 4
i = 2, j = 1
i = 3, j = 1
i = 3, j = 2
i = 3, j = 3
i = 3, j = 4
i = 4, j = 1
i = 4, j = 2
i = 4, j = 3
i = 4, j = 4

如果想让 i=2,j=2 时直接跳出外层循环,就可以使用标签,代码如下:

fun main(args: Array<String>) {loop@ for (i in 1..4) {for (j in 1..4) {if (i == 2 && j == 2) {break@loop}println("i = $i, j = $j")}}
}

在外层循环处声明一个标签loop@,当需要 break 的时候,直接使用break@loop就可以跳出外层循环。运行结果如下:

i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 1, j = 4
i = 2, j = 1

上面的代码等价于如下Java代码:

    public static void main(String[] args) {loop: for (int i = 1; i <= 4; i++) {for (int j = 1; j <= 4; j++) {if (i == 2 && j == 2) {break loop;}System.out.println("i = " + i + ", j = " + j);}}}

continue 标签的使用方式和 break 一样,不再赘述。

标签处返回

举例如下:

fun main(args: Array<String>) {val ints = intArrayOf(1, 2, 3, 0, 4, 5, 6)ints.forEach {if (it == 0) returnprint(it)}
}

上面代码中的 return 指的是从 main 函数中返回,因为 main 函数是最直接包围它的函数。所以运行结果为:

123

如果想要从 forEach 中的 lambda 表达式中返回,就需要使用标签了。代码如下,在 lambda 表达式的前面声明一个标签lit@,然后在 return 处使用标签,即return@lit

val ints = intArrayOf(1, 2, 3, 0, 4, 5, 6)
ints.forEach lit@ {if (it == 0) return@litprint(it)
}

运行结果为:

123456

除了这种方式之外,还可以使用隐式标签。 该标签与接受 lambda 表达式的函数同名,在上个例子中就是 forEach 。即:

val ints = intArrayOf(1, 2, 3, 0, 4, 5, 6)
ints.forEach {if (it == 0) return@forEachprint(it)
}

如果不使用标签,还可以使用匿名函数替代 lambda 表达式实现上述功能,代码如下。 匿名函数内部的 return 语句将从该匿名函数自身返回,但使用这种方式不如使用 lambda 表达式代码清晰简洁。

val ints = intArrayOf(1, 2, 3, 0, 4, 5, 6)
ints.forEach(fun(value: Int) {if (value == 0) returnprint(value)
})

参考资料:http://kotlinlang.org/docs/reference/returns.html

转载于:https://www.cnblogs.com/duduhuo/p/6908233.html

Kotlin学习笔记(1):标签相关推荐

  1. Kotlin学习笔记20 阶段复习2

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 lambda表达式 内联函数 Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数_积跬步 至千里- ...

  2. Kotlin 学习笔记(八)—— Kotlin类与对象之接口

    Kotlin 学习笔记(八)-- Kotlin类与对象之接口 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- 基础 ...

  3. Kotlin学习笔记(3)- 语法

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  4. Kotlin学习笔记(2)- 空安全

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  5. Kotlin学习笔记(1)- 环境配置

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  6. kotlin学习笔记——枚举、封闭类

    1.枚举 kotlin中提供类枚举的实现,与java相同.枚举可以带参数,如 enum Icon(val res: Int){MENU(R.drawable.menu),BACK(R.drawable ...

  7. kotlin学习笔记——重载操作符

    Kotlin中有很多操作符可以使用,具体可以见kotlin学习笔记--操作符_There is a Bug!!!-CSDN博客 Kotlin的一个特点就是可以重载这些操作符,为操作符赋予不同的行为. ...

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

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

  9. Kotlin学习笔记19 阶段复习1

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 基础部分 Kotlin学习笔记 第一章开始 第二章 基础_积跬步 至千里-CSDN博客 类与继承 Kotlin学习笔记 第 ...

  10. Kotlin学习笔记12——数据类和密封类

    Kotlin学习笔记12--数据类和密封类 前言 数据类 在类体中声明的属性 复制 componentN 解构声明 密封类 尾巴 前言 上一篇,我们学习了Kotlin中的拓展,今天继续来学习Kotli ...

最新文章

  1. SAP C/4HANA五朵云
  2. oracle 数据库讲解,oracle数据库基本讲解(菜鸟篇)
  3. Solaris RAID 换盘/替换坏盘
  4. 修改Linux系统时间
  5. Linux基础-1.0共享文件夹创建
  6. python 隐马尔科夫_机器学习算法之——隐马尔可夫(Hidden Markov ModelsHMM)原理及Python实现...
  7. android dialog activity 窗口全透明,Android Dialog形式的Activity
  8. Unity中Android API 28之后无法HTTP请求
  9. java使double保留两位小数
  10. 【笔试/面试】—— linux(rpm)
  11. delete kubectl pod_kubectl delete
  12. Publish over FTP发布报错
  13. 关于CSS的fixed定位
  14. 真正实现再wine上安装VC6.0,并编译调试程序
  15. AI 视频分析识别系统技术分析
  16. 人工智能数学基础:求导神器--罗必塔法则
  17. CentOS 7 断电分区表丢失解决方法
  18. mysql高效查询_mysql 高效率查询背景
  19. 面向NNA 功能覆盖的精简操作集计算 (ROSC)
  20. 资深工程师专业评测--安卓免费的银行卡识别SDK,华为 HMS MLKit 和Card IO哪个好?

热门文章

  1. Android:屏幕自适应
  2. 修改MFC标题栏上的图标和修改MFC窗口标题(转)
  3. eclipse无法启动的各种解决方法
  4. SpringBoot MongoDB批量插入数据
  5. v2ex热帖:面了几个程序员(3-5年),发现他们对MySQL的distinct关键字有误解......
  6. 详解分布式系统与消息投递(架构师必备)
  7. 阿里人告诉你毕业3年,为何技术能力相差越来越大?
  8. 你就非得 TCP?为啥不直接 UDP 呢!
  9. 不想开滴滴、送外卖的产品经理,听我一声劝……
  10. linux 安装apache resin,Linux下安装resin+apache+jdk+php+mysql(gd)全过程(二)