forEach
Kotlin には、 or のような非常に優れた反復関数がありますが、 and演算子をそれらで動作さrepeat
せることはできません(ローカルと非ローカルの両方)。break
continue
repeat(5) {
break
}
(1..5).forEach {
continue@forEach
}
目標は、関数構文を使用して通常のループをできるだけ模倣することです。Kotlin の古いバージョンでは確かに可能でしたが、構文を再現するのに苦労しています。
問題はラベル (M12) のバグである可能性がありますが、最初の例はいずれにしても機能するはずです。
どこかで特別なトリック/注釈について読んだことがあるような気がしますが、その件に関する参考資料を見つけることができませんでした。次のようになるかもしれません:
public inline fun repeat(times: Int, @loop body: (Int) -> Unit) {
for (index in 0..times - 1) {
body(index)
}
}
ベストアンサー1
これにより、1 から 5 が出力されます。これはJava のreturn@forEach
キーワードのように動作しますcontinue
。つまり、この場合、すべてのループが実行されますが、値が 5 より大きい場合は次の反復にスキップされます。
fun main(args: Array<String>) {
val nums = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
nums.forEach {
if (it > 5) return@forEach
println(it)
}
}
これにより、1 から 10 が印刷されますが、5 はスキップされます。
fun main(args: Array<String>) {
val nums = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
nums.forEach {
if (it == 5) return@forEach
println(it)
}
}
これは 1 から 4 を出力し、5 に達すると中断します。
fun main(args: Array<String>) {
val nums = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
run breaking@ {
nums.forEach {
if (it == 5) return@breaking
println(it)
}
}
}