Kotlin-Lernpfad (2): Kontrollfluss

1. Grundlegende Kontrollanweisung

Das Folgende versteht hauptsächlich die grundlegenden Steueranweisungen von Kotlin: if, when-Anweisungen

1.1 if-Ausdruck

Kotlins if-Ausdruck ist im Grunde derselbe wie Java, alle sind if, else, else if. Kein Quatsch direkt am Code

		@JvmStatic
        fun main(args:Array<String>){
    
    
            var a = 3
            var b = 3
            if (a > b){
    
    
                println("Maximum is a")
            }else if (a < b){
    
    
                println("Minimum is b")
            }else{
    
    
                println("a = b")
            }
        }

Aus dem obigen Code ist ersichtlich, dass er im Wesentlichen der if-Syntax von Java ähnelt. Aber es gibt noch einige Unterschiede: Das Ergebnis der if-Anweisung von kotlin kann einer Variablen zugewiesen werden.
Der folgende Code:

		@JvmStatic
        fun main(args:Array<String>){
    
    
            var a = 3
            var b = 3
            var result = if (a > b){
    
    
                1
            }else if (a < b){
    
    
                -1
            }else{
    
    
                0
            }
            println(result)
        }

Dies bedeutet, dass wir diese Funktion verwenden können, um eine Menge Code zu vereinfachen.

1.2 wenn Ausdruck

Kotlins when-Anweisung wird verwendet, um die switch-Anweisung zu ersetzen. Die grundlegende Syntax lautet:

		@JvmStatic
        fun main(args:Array<String>){
    
    
            var test = 3
            when(test){
    
    
                0-> println("0")
                1-> println("1")
                2-> println("2")
                3-> println("3")
                else-> println("else")
            }
        }

Im Vergleich zu switch-case kann when neben Konstanten vom Datentyp Int auch Konstanten anderer Datentypen akzeptieren. Beachten Sie, dass else äquivalent zu default ist . Neben der Annahme von Konstanten verschiedener Datentypen können auch beliebige Ausdrücke akzeptiert werden.
Zum Beispiel der folgende Code:

		@JvmStatic
        fun main(args:Array<String>){
    
    
            var test = 3
            when(test){
    
    
                0,1,2,3-> println("0,1,2,3") // 在0,1,2,3中的一个(离散集合)
                else-> println("else")
            }

            when(test){
    
    
                in 0..3-> println("0..3") // 在[0, 3]区间中
                in 0 until 3-> println("0 until 3") // 在[0, 3)区间中
                !in 3..5-> println("!in 3..5") // 不在[3, 5]区间中
                else-> println("else")
            }
                        
            var str = "aaa"
            var result = when (str) {
    
    
                is String -> str.startsWith("a")// 判断字符串是否包含"a"(从开头找)
                else -> false
            }
            println(result)
        }

when kann in einigen Fällen auch if-else if-else ersetzen, wie z. B. das if-Urteil oben.

		@JvmStatic
        fun main(args:Array<String>){
    
    
            var a = 3
            var b = 3
            // 当when不需要传入参数,所有的分支条件都是简单的布尔表达式。
            when {
    
    
                a > b -> println("Maximum is a")
                a < b -> println("Minimum is b")
                else -> println("a = b")
            }
        }

2. Schleifenanweisung

Das Folgende versteht hauptsächlich die grundlegenden Schleifenanweisungen von Kotlin: for, while, do...while-Anweisungen

2.1 for-Schleife

Es gibt immer noch viele Unterschiede zwischen der For-Schleife von Kotlin und der von Java, und die For-Schleife von Kotlin ist prägnanter.
Code zeigen wie folgt:

		@JvmStatic
        fun main(args:Array<String>){
    
    
            for (i in 0..5){
    
     // [0, 5]区间循环
                println(i)
            }

            for (i in 0 until 5){
    
     // [0, 5)区间循环,不包含5
                println(i)
            }

            for (i in 5 downTo  0){
    
     // [5, 0]区间循环
                println(i)
            }
            
            for (i in 10 downTo 0 step 2) {
    
     // [10, 0]区间每隔两个打印
                println(i)
            }
        }

Das Obige ist die allgemeine Verwendung der for-Schleife. Später werden wir vorstellen, wie die for-Schleife auf Arrays und Sammlungen verwendet wird. Wir werden darüber sprechen, wenn wir Arrays und Sammlungen vorstellen.

2.2 while-Schleife und do...while-Schleife

while und do...while-Schleifen sind dasselbe wie Java, im Grunde nichts zu sagen

var test0 = 10
var test1 = 10
while (test0 > 0) {
    
    
    test0--
}

do {
    
    
  test1--
} while (test1 > 0) // y 在此处可见

3. Etikett

3.1 Grundanwendung

Tags sind einzigartig für Kotlin, nicht in Java, und Tags müssen in Kombination, Break, Continue und Return verwendet werden. Wenn Sie keine Tags verwenden müssen, ist es dasselbe wie bei Java.
Das Label ist loop@, und die Schleife kann hier auch durch andere Zeichenfolgen wie abc@ und dergleichen ersetzt werden.

loop@ for (i in 1..100) {
    
    
    // ……
}

Benutze loop@:

loop@ for (i in 1..3) {
    
    
    for (j in 1..3) {
    
    
        if (i == 2) break@loop //这样可以直接break到外层for循环,如果不加@loop,则是break出内层函数。
    }
}

Sehen Sie sich zu Überprüfungszwecken loop@den folgenden Code an.
Beispielcode:

fun main(){
    
    
    loop@ for (i in 1..3) {
    
    
        println("i= $i")
        for (j in 1..3) {
    
    
            if (i == 2) break@loop //这样可以直接break到外层for循环,如果不加@loop,则是break出内层循环。
            println("j= $j")
        }
        println()
    }
    println("end")
}

Operationsergebnis:

i= 1
j= 1
j= 2
j= 3

i= 2 // 此时i==2直接break到外层for循环,由于break,直接中断了外层循环
end

Aus den obigen Ausführungsergebnissen ist ersichtlich, dass bei i = 2 direkt zur äußeren for-Schleife gesprungen wird und gleichzeitig die äußere for-Schleife das Programm wegen der Unterbrechung zum Beenden der Schleife beendet.

Wenn es geändert wird, continue@loopspringt es auch zur äußeren Schleife, überspringt jedoch nur die aktuelle Schleife der äußeren Schleife, und die nachfolgende Schleife wird weiter ausgeführt.
Code:

fun main(){
    
    
    loop@ for (i in 1..3) {
    
    
        println("i= $i")
        for (j in 1..3) {
    
    
            if (i == 2) continue@loop
            println("j= $j")
        }
        println()
    }
    println("end")
}

Operationsergebnis:

i= 1
j= 1
j= 2
j= 3

i= 2
i= 3
j= 1
j= 2
j= 3

end

Labels werden eher für die Rückgabe von Lambda-Ausdrücken verwendet.

3.2 Implizite Verwendung von Tags

Labels können auch implizit verwendet werden:

		private fun test(){
    
     // 函数
            val list = listOf(0, 1, 2, 3, 4, 5)
            list.forEach {
    
    
                if (it == 3) return // 直接跳出test函数
                println(it)
            }
            println("end!")
        }

Operationsergebnis:

0
1
2
// 注意到println("end!")没有执行

Der obige Code springt direkt aus der Testfunktion heraus und der folgende println("end!")wird nicht ausgeführt. Was ist jedoch, wenn meine Anforderung lautet, dass ich bei it==3 diesen Zyklus einfach überspringe, anstatt aus der Funktion zu springen? Was Sie vielleicht denken, ist breakund continuetatsächlich wird es eine Fehlermeldung geben, wenn Sie auf diese Weise schreiben 'break' and 'continue' are only allowed inside a loop("break" und "continue" können nur in einer Schleife verwendet werden), forEach ist eigentlich eine anonyme Funktion, keine Schleife, die in späteren Kapiteln detailliert beschrieben werden. Erklären Sie anonyme Funktionen ( Kotlin-Lernpfad (3): Funktion ).
Um diese Schleife in der anonymen Funktion zu überspringen, anstatt aus der Schleife zu springen, können Labels verwendet werden.

		// 第一种写法
		private fun test(){
    
    
            val list = listOf(0, 1, 2, 3, 4, 5)
            list.forEach {
    
    
                if (it == 3) return@forEach
                println(it)
            }
            println("end!")
        }
        
        // 第二种写法
		private fun test(){
    
    
            val list = listOf(0, 1, 2, 3, 4, 5)
            list.forEach loop@{
    
    
                if (it == 3) return@loop
                println(it)
            }
            println("end!")
        }

Operationsergebnis:

0
1
2
4
5
end!

Aus den obigen Operationsergebnissen ist ersichtlich, dass it==3es nicht die Funktion ist, wenn forEach herausspringt (überspringe den Fall von it=3).

3.2.1 forEach & forEachIndex springen aus der ganzen Schleife heraus

Das obige ist, einmal in der Schleife zu überspringen, ähnlich wie , wenn Sie eine ähnliche Funktion wie oder continueerreichen möchten , können Sie versuchen, die Standardfunktion von kotlin zu verwendenbreakreturnrun

val list = listOf(0, 1, 2, 3, 4, 5, 6)
    run loop@{
    
     // 在标准函数上加上loop@标签
       list.forEach {
    
    i ->
           if (i == 3) return@loop
           println("i= $i")
       }
    }
println("end!")

Ausgabeergebnis:

i= 0
i= 1
i= 2
end!

Wie aus den obigen Ergebnissen ersichtlich ist, springt es bei i==3 vollständig aus der Schleife heraus, springt zur Standardfunktion runund führt sie dann ausprintln("end!")

おすすめ

転載: blog.csdn.net/RQ997832/article/details/122756581