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

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.
主站蜘蛛池模板: 藁城市| 安多县| 武穴市| 牡丹江市| 孝感市| 左贡县| 重庆市| 上蔡县| 丰原市| 陇西县| 定安县| 临海市| 榆社县| 乌恰县| 贵德县| 太康县| 炉霍县| 襄汾县| 淄博市| 乐昌市| 泾源县| 文山县| 威宁| 怀来县| 奎屯市| 奇台县| 岫岩| 安化县| 白山市| 林西县| 常山县| 高阳县| 邵阳市| 贵溪市| 亳州市| 黑山县| 长丰县| 安平县| 榆中县| 赤水市| 定陶县|