Kotlin返回与跳转

前言

  • 你还在把Java当成Android官方开发语言吗?Kotlin了解一下!
  • 2017年Google IO大会宣布使用Kotlin作为Android的官方开发语言,相比较与典型的面相对象的JAVA语言,Kotlin作为一种新式的函数式编程语言,也有人称之为Android平台的Swift语言。

环境以及工具

Android Studio 3.3

整体介绍

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

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

return关键字

 //-----------------------return-------------------------------------
    //默认从最直接包围它的函数或者匿名函数返回
    val a = arrayOf(1, 2, 3, 0, 6)
    fun outer() {
        a.forEach {
            if (it == 0) {
                return
            }
            print("$it")
        }
    }
    outer()//输出结果-------------------------123-------------------------
    println()

    //从 lambda 表达式中返回,我们必须给它加标签并用以限制 return
    fun outer2() {
        a.forEach lit@{
            if (it == 0) {
                return@lit
            }
            print("$it")
        }
    }
    outer2()//输出结果-------------------------1236-------------------------
    println()

    //从 lambda 表达式中返回。通常情况下使用隐式标签更方便。 该标签与接受该 lambda 的函数同名
    fun outer3() {
        a.forEach {
            if (it == 0) {
                return@forEach
            }
            print("$it")
        }
    }
    outer3()//输出结果-------------------------1236-------------------------
    println()

复制代码

Break关键字

    //-----------------------Break-------------------------------------
    loop@ for (i in 1..5) {
        for (j in 1..5) {
            if (j == 2) {
                print("$j,")
                break@loop
            }
        }
    }//输出结果-------------------------2,-------------------------
    println()
复制代码

Continue关键字

  loop@ for (i in 1..5) {
        for (j in 1..5) {
            if (j == 2) {
                print("$j,")
                continue@loop
            }
        }
    }//输出结果-------------------------2,2,2,2,2,-------------------------
    println()
复制代码

标签处返回

    fun foo() {
        arrayOf(1, 2, 3, 4, 6).forEach {
            if (it == 3) return // 非局部  直接返回到 foo() 的调用者
            print(it)
        }
        print(" done with foo function")
    }
    foo()//输出结果-------------------------12-------------------------
    println()

    //匿名函数替代 lambda 表达式
    fun foo4() {
        arrayOf(1, 2, 3, 4, 6).forEach(fun(value: Int) {
            if (value == 3) return // 局部 返回到匿名函数的调用者,即 forEach 循环
            print(value)
        })
        println()
        print("done with foo4 function")
    }
    foo4()
//    *********************************输出结果*********************************
//    1246
//    done with foo4 function
//    *********************************输出结果*********************************

    fun foo2() {
        arrayOf(1, 2, 3, 4, 6).forEach lit@{
            if (it == 3) return@lit // 局部 返回到该 lambda 表达式的调用者,即 forEach 循环
            print(it)
        }
    }
    foo2()//输出结果-------------------------12-------------------------
    println()

    fun foo3() {
        run loop@{
            listOf(1, 2, 3, 4, 5).forEach {
                if (it == 3) return@loop // 从传入 run 的 lambda 表达式非局部返回
                print(it)
            }
        }
        println()
        println("run 方法执行完毕")
    }
    foo3()
//    *********************************输出结果*********************************
//    12
//    run 方法执行完毕
//    *********************************输出结果*********************************
复制代码

##源码 请关注公众号并在后台回复:kotlin

Kotlin重构系列分享教程

Kotlin环境搭建

Kotlin重构初体验之告别FindViewById

Kotlin基本类型

Kotlin 控制语句 if when for while

Kotlin重构如何兼容原先的ButterKnife、EventBus3.1

当ButterKnife8.8.1碰到AndroidX怎么办

Githup教程开源项目

Python爬虫系列分享教程

Python爬虫之旅之Selenium库的使用

Python爬虫之旅之豆瓣音乐

请关注我(分享日常开发)

你可能感兴趣的:(Kotlin返回与跳转)