Kotlinはあなたの演技を始めてください--03フローコントロール編

3764 ワード

プロセス制御
1、if文
基本的な使い方はここでは言わないで、Javaとは違うところを話します.
  • if式(代替三目演算子)は簡単に言えばif文に戻り値があることを忘れないでください.例えば、
    var a: Int = 10
    var b: Int = 11
    var max = if (a > b) a else b
    
    忘れないでください.if文はコードブロックをサポートしているので、戻り値の前にいくつかの操作を行うことができます.戻り値がコードブロックの最後の行のコードであることを保証すればいいです.
    var max2 = if (a > b) {
        println("a b ")
        a
    } else {
        println("b     a")
        b
    }   
    
    注:ifが式として割り当てられている場合、else文ブロックと組み合わせて使用する必要があります.

  • 2、when文
    when文の出現は,純粋にswitchの代わりに,より多くの機能を提供するためである.私たちは依然として簡単な例で理解しています.
    //       A-D  
    var num = 1
    when(num){
        0 -> println("A")
        1 -> println("B")
        2 -> println("C")
        else -> println("D")
    }
    
    //  :  B
    

    switch文に置き換えるのもso easyかもしれませんが、対応するアルファベットを一時的に保存してから使用する必要がある場合は、switch文は必ず文の前に変数を定義し、caseでその変数に値を割り当てる必要があります.if式のように戻り値とコードブロックもサポートされているので、whenはそんなに面倒ではありません.
  • when式
     var numStr = when (num) {
            0 -> {
                println("A")
                "A"
            }
            1 -> {
                println("B")
                "B"
            }
            2 -> {
                println("C")
                "C"
            }
            else -> {
                println("D")
                "D"
            }
        }
    println(numStr) //  B
    
    注:if文と同様にwhen式もelse文を組み合わせて使用する必要がありますが、コンパイラが分岐条件がすべての可能性をカバーしていることを証明できない限り、else文を省略することができます.例えば、次の列挙例を使用します.
    /**
     *    ,  4     
     * */
    enum class MyEnum(val num: Int) {
        A(0), B(1), C(2), D(3)
    }
    
    の場合のwhen式は、以上の4つの列挙対象を考慮すれば、else文:
    var mEnum: MyEnum = MyEnum.B
    var enumStr = when (mEnum) {
        MyEnum.A -> "A"
        MyEnum.B -> "B"
        MyEnum.C -> "C"
        MyEnum.D -> "D"
    }
    println(enumStr)
    
  • を使用しないでください.
    3、for文
    Kotlinのforループ文はJavaよりもかなり簡略化されていると思いますが、次の例でご理解ください.
    var arr = arrayOf(1,2,3,4,5)
    //    item
    for (item in arr) {
        println(item)
    }
    
    //      item
    for (index in arr.indices) {
        println(arr[index])
    }
    
    //     ,     
    for ((index, item) in arr.withIndex()) {
        println("$index :: $item")
    }
    

    また、データ型が反復器をサポートしている限り、このfor文を使用してデータを巡回することができます.
    4、whileとdo...while文
    whileとdo...while文はJavaと同じで、先に持ってきました_
    var arr = arrayOf(1, 2, 3, 4, 5)
    
    var index = 0
    while (index < arr.size) {
        println(arr[index])
        index++
    }
    
    var index2 = 0
    do {
        println(arr[index2])
        index2++
    } while (index2 < arr.size)
    

    5、breakcontinuereturn文&ラベルジャンプ
    この3つの文の基本的な使い方と意味はKotlinで他の言語と同じです.
    break       :            
    continue    :                 
    return      :         
    

    また、異なる点についてお話しします.Kotlinではラベルジャンプをサポートしています(C言語のgoto文に似ていますが、以上の3つの文と一緒に使用する必要があります).3 D配列をシミュレートします.この配列には3つの数字88がありますが、各次元には1つの数字88しかありません.この3つの数のインデックスを探してみましょう.
    //    
    var arr = arrayOf(
            arrayOf(arrayOf(1, 2, 3), arrayOf(1, 88, 3), arrayOf(1, 2, 3)),
            arrayOf(arrayOf(1, 2, 3), arrayOf(1, 2, 3), arrayOf(1, 88, 3)),
            arrayOf(arrayOf(1, 88, 3), arrayOf(1, 2, 3), arrayOf(1, 2, 3))
    )
    
    next@ for ((i, item) in arr.withIndex()) {
        for ((j, item2) in item.withIndex()) {
            for ((k, item3) in item2.withIndex()) {
                if (item3 == 88) {
                    println("($i , $j , $k)")
                    continue@next
                }
            }
        }
    }
    
      :
    (0 , 1 , 1)
    (1 , 2 , 1)
    (2 , 0 , 1)
    

    私たちはこの3つの数を貧乏に挙げて暴力的に調べ、そのうちの1つを調べるたびにcontinue文を通じてラベルnext@の位置にジャンプし、次のループを行います(もちろんbreakを使用するとラベルnext@の位置のforループを直接終了します).
    return文とラベルの使用シーンは、ネスト関数やlambda式で使用されることが多く、対応する章を待ってから詳しく話します.
    ここまで、Kotlinではプロセス制御に関する知識点もまとめました.漏れや間違いがあれば、ご指摘ください.