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

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.
主站蜘蛛池模板: 迁西县| 安平县| 罗定市| 威信县| 樟树市| 于都县| 鸡泽县| 凤冈县| 新昌县| 祁东县| 肃宁县| 延津县| 莫力| 巴彦淖尔市| 南皮县| 南昌市| 砚山县| 平凉市| 融水| 抚顺市| 射阳县| 济南市| 涪陵区| 子洲县| 玉山县| 茌平县| 汝州市| 伊川县| 南陵县| 敦化市| 尉氏县| 东台市| 石河子市| 苏尼特右旗| 西城区| 藁城市| 保靖县| 莱芜市| 兰西县| 尉氏县| 霍城县|