Codido: loop@ for (i in 1..100) { println("i $i") for (j in 1..100) { println("j $j") if (j == 5) break@loop } }
Codido: loop@ for (i in 1..100) { println("i $i") for (j in 1..100) { println("j $j") if (j == 5) break@loop } }
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!!