官术网_书友最值得收藏!

Loops

Kotlin supports the usual duo of loop constructs found in most languages—the while loop and the for loop. The syntax for while loops in Kotlin will be familiar to most developers, as it is exactly the same as most C-style languages:

    while (true) { 
      println("This will print out for a long time!") 
    } 

The Kotlin for loop is used to iterate over any object that defines a function or extension function with the name iterator. All collections provide this function:

    val list = listOf(1, 2, 3, 4) 
    for (k in list) { 
      println(k) 
    } 
 
    val set = setOf(1, 2, 3, 4) 
    for (k in set) { 
      println(k) 
    } 

Note the syntax using the in keyword. The in operator is always used with the for loops. In addition to collections, integral ranges are directly supported either inline or defined outside:

    val oneToTen = 1..10 
    for (k in oneToTen) { 
      for (j in 1..5) { 
        println(k * j) 
       } 
    } 
Ranges are handled in a special way by the compiler, and are compiled into index-based for loops that are supported directly on the JVM, thus avoiding any performance penalty from creating iterator objects.

Any object can be used inside a for loop provided that it implements a function called iterator , making this an extremely flexible construct. This function must return an instance of an object that provides the following two functions:

  • The fun hasNext(): Boolean operator
  • The fun next(): T operator

The compiler doesn't insist on any particular interface, as long as the object returned has those two functions present. For example, in the standard String class, Kotlin provides an iterator extension function that adheres to the required contract, and so strings can be used in a for loop to iterate over the individual characters:

    val string = "print my characters" 
    for (char in string) { 
      println(char) 
    } 

Arrays have an extension function called indices, which can be used to iterate over the index of an array:

    for (index in array.indices) { 
      println("Element $index is ${array[index]}") 
    }
The compiler also has special support for arrays, and will compile a loop over an array to a normal index-based for loop, avoiding any performance penalty just like for range loops.
主站蜘蛛池模板: 新沂市| 大庆市| 岳阳市| 湟中县| 溆浦县| 新河县| 习水县| 兴安盟| 蓝山县| 汕尾市| 麻栗坡县| 敦化市| 汉源县| 隆子县| 临夏县| 博野县| 进贤县| 梓潼县| 英德市| 稷山县| 南丰县| 渝北区| 浑源县| 绥芬河市| 班戈县| 即墨市| 老河口市| 曲靖市| 兴隆县| 盐池县| 临桂县| 利津县| 太湖县| 井陉县| 昌邑市| 商南县| 南华县| 孙吴县| 洪湖市| 富平县| 章丘市|