1
resposta

Para que server o @loop?

Codido: loop@ for (i in 1..100) { println("i $i") for (j in 1..100) { println("j $j") if (j == 5) break@loop } }

1 resposta

Oi Gabriel, tudo bem?

O loop@ (poderiamos ter dado qualquer outro nome) é o que chamamos de label, então vamos supor que nós não tivéssemos inserido esse label no código:

for (i in 1..100) {
    println("i $i")
    for (j in 1..100) {
        println("j $j")
        if (j == 5) break
    }
}

O resultado seria mais ou menos isso:

i 1
j 1
j 2
j 3
j 4
j 5
i 2
j 1
j 2
j 3
j 4
j 5

e assim por diante até o i 100...

i 100
j 1
j 2
j 3
j 4
j 5

fim

Perceba que diferente do que ocorreu na atividade, o i chegou até o 100. Mas por que isso aconteceu? Isso foi graças ao label loop@ que inserimos antes do primeiro for e depois do break.

loop@ for (i in 1..100) {
    println("i $i")
    for (j in 1..100) {
        println("j $j")
        if (j == 5) break@loop
    }
}

O que ele fez foi criar uma ligação entre esses dois pontos (for externo e break), fazendo com que ao executarmos o break, ao invés de sairmos apenas do loop/laço mais interno que imprime o j e voltarmos para o loop mais externo que imprime o i (como aconteceu sem a label), agora nós saímos do laço externo também! Assim, encerramos o programa e o resultado acaba no j 5:

i 1
j 1
j 2
j 3
j 4
j 5

fim

Espero ter ajudado, qualquer dúvida estou à disposição!

Bons estudos!!