Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 重复功能的目的_Kotlin - Fatal编程技术网

Kotlin 重复功能的目的

Kotlin 重复功能的目的,kotlin,Kotlin,使用kotlin,我可以通过至少两种方式重复操作: val times = 5 // First option for (i in 0 until times) { print("Action $i") } // Second option repeat(times) { print("Action $it") } 我想知道这个计划的目的 如果可能,是否应将传统的for循环替换为repeat功能 或者该功能是否有特殊情况 repeat功能有什么优势吗 编辑 我对这个问

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

val times = 5

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

// Second option
repeat(times) {
    print("Action $it")
}
我想知道这个计划的目的

  • 如果可能,是否应将传统的
    for
    循环替换为
    repeat
    功能
  • 或者该功能是否有特殊情况
  • repeat
    功能有什么优势吗

编辑

我对这个问题做了一些研究。只要kotlin是开源项目,我就可以下载源代码并检查git历史

我发现

1)
repeat
函数是对
函数扩展的替换

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

2) <代码>时间功能已被弃用。但是为什么呢?

下面几行都是我的观点:

  • 当您应该或不应该使用
    repeat
    功能
  • 它有更简洁的语法
  • 在不需要操作循环计数器的地方,或者在不需要重复循环计数器的地方,我只会使用该函数
由您决定何时以及如何使用它。

来自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(索引为0,直到times)

还有一个基于零的循环计数器,它是:
it

如果出现以下情况,是否应将传统的for循环替换为repeat函数 可能吗

我找不到任何理由

或者该功能是否有特殊情况

没有我能想到的

重复功能有什么优势吗

没有我能想到的,或者也许(?)只有1:
出于教育目的,我认为教学更容易

repeat(n){}
在花括号内对语句块执行n次迭代。

这只是一个方便的问题(缩短代码)。甚至还有更多的方法,例如使用
内部网
forEach

(0..4).forEach {
    println(it)
}
01 2 3 4

它们都有相同的用途,所以选择权在你


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

repeat(times)
相当的是
for(i in 0直到times)
而不是
for(i in 0..times)
它实际上更简洁。我不经常使用它,但在解析文件时有很多次。假设我解析的字段告诉我有多少个点/位置跟随,我可以使用
repeat(numPoints){points+=parsePosition(stream)}
来解析它们。我本来可以用
来表示
,但是
重复
比较短,我觉得读起来更好。有趣的是:
readCount times{rl.unlock()}
-这是2015年使用的时间扩展。无点符号。