package com.zj.example.kotlin.shengshiyuan.helloworld

/**
 *
 * CreateTime: 2019/1/8  18:45
 * @author 郑炯
 */

fun main(args: Array<String>) {
    val demo = `HelloKotlin-跳出循环-foreach`()
    //demo.test1()
    //demo.test2()
    //demo.test3()
    //demo.test4()
}

class `HelloKotlin-跳出循环-foreach` {

    /**
     * 输出:
     * 1
     */
    fun test1() {
        val list = listOf(1, 2, 3, 4)
        list.forEach {
            if (it == 2) {
                //这里不带@标签的return将会返回这个函数
                return
            }
            println(it)
        }
        println("end")
    }

    /**
     * 输出:
     * 1
     * 2
     * 3
     * end
     */
    fun test2() {
        val list = listOf(1, 2, 3, 4)
        list.forEach {
            if (it == 2) {
                //这里的return相当于是continue, 只能中断当前这一次循环
                return@forEach
            }
            println(it)
        }
        println("end")
    }

    /**
     * forEach正确的break用法:
     *
     * 输出:
     * 1
     * end
     */
    fun test3() {
        val list = listOf(1, 2, 3, 4)

        kotlin.run {
            list.forEach {
                if (it == 2) {
                    //这里的return相当于是break, 直接跳出循环
                    return@run
                }
                println(it)
            }
        }

        println("end")
    }

    /**
     * 匿名函数的形式, 但是也只能continue,不能break
     *
     */
    fun test4() {
        val list = listOf(1, 2, 3, 4)

        list.forEach(fun(x) {
            if (x == 2) {
                //这里的return相当于是break, 直接跳出循环
                return
            }
            println(x)
        })
        println("end")
    }
}