Kotlin tem funções de iteração muito boas, como forEach
ou repeat
, mas não consigo fazer os operadores break
e continue
trabalharem com eles (locais e não locais):
repeat(5) {
break
}
(1..5).forEach {
continue@forEach
}
O objetivo é imitar os loops usuais com a sintaxe funcional o mais próximo possível. Isso era definitivamente possível em algumas versões mais antigas do Kotlin, mas tenho dificuldade em reproduzir a sintaxe.
O problema pode ser um bug com rótulos (M12), mas acho que o primeiro exemplo deve funcionar mesmo assim.
Parece-me que li algures sobre um truque / anotação especial, mas não consegui encontrar nenhuma referência sobre o assunto. Pode ser parecido com o seguinte:
public inline fun repeat(times: Int, @loop body: (Int) -> Unit) {
for (index in 0..times - 1) {
body(index)
}
}
break
e continue
para loops funcionais, ou se está procurando respostas alternativas que façam exatamente a mesma coisa. O primeiro parece ser o caso, porque você rejeitou o último.
continue@label
ebreak@label
), consulte a pergunta relacionada: stackoverflow.com/questions/34642868/…