重复功能的目的

时间:2018-12-29 11:10:36

标签: kotlin

使用Kotlin,我可以通过至少两种方式重复执行操作:

val times = 5

// First option
for (i in 0 until times) {
    print("Action $i")
}

// Second option
repeat(times) {
    print("Action $it")
}

我想知道repeat的目的。

  • 如果可能,是否应将传统for循环替换为repeat函数?
  • 或者此功能有特殊情况吗?
  • repeat函数有什么优点吗?

编辑

我已经对该问题进行了一些研究。只要kotlin是开源项目,我就可以下载源代码并检查git历史记录。

我发现

1)repeat函数代替了times函数扩展。

public inline fun Int.times(body : () -> Unit)

2)KT-7074times函数已被弃用。但是为什么呢?

3 个答案:

答案 0 :(得分:0)

接下来的几行只是我的意见:

  • 在什么情况下,您应该使用或不应该使用repeat 功能。
  • 它具有更简洁的语法。
  • 在您不需要操纵循环计数器或只需重复的某些地方,我将使用该功能。

完全由您决定何时以及如何使用它。

答案 1 :(得分:0)

从Standard.kt:

/**
 * Executes the given function [action] specified number of [times].
 *
 * A zero-based index of current iteration is passed as a parameter to [action].
 *
 * @sample samples.misc.ControlFlow.repeat
 */
@kotlin.internal.InlineOnly
public inline fun repeat(times: Int, action: (Int) -> Unit) {
    contract { callsInPlace(action) }

    for (index in 0 until times) {
        action(index)
    }
}

您会看到repeat(times)实际上是for (index in 0 until times)
还有一个从零开始的循环计数器,它是:it

  

如果将传统的for循环替换为repeat函数,   可能吗?

我找不到任何原因

  

此功能是否有特殊情况?

我想不到的。

  

重复功能有什么优点吗?

我想不起来,也许(?)只是1:
出于教育目的,我想教书更容易
repeat(n) { } 对大括号内的语句块执行n次迭代

答案 2 :(得分:0)

这只是一个方便问题(缩短代码)。还有更多方法,例如使用IntRangeforEach

(0..4).forEach {
    println(it)
}
  

0 1 2 3 4

它们都具有相同的目的,所以选择是您的。

您也不必担心性能,因为repeatforEach是内联函数,这意味着lambda代码会在编译时复制到调用站点。