URL: https://www.progressiverobot.com/using-break-and-continue-statements-when-working-with-loops-in-go-pt/

Introdução

O uso de loops do tipo "for" em Go permite que você automatize e repita tarefas de maneira eficiente.

Aprender como controlar a operação e o fluxo dos loops permitirá uma lógica personalizada em seu programa. É possível controlar seus loops com as instruções break [interromper] e continue [continuar].

Instrução break

break illustration for: Instrução break

Em Go, a instrução break termina a execução do loop atual. Uma break está quase sempre pareada com uma instrução condicional if.

Vamos ver um exemplo que usa a instrução break em um loop do tipo "for":

				
					
[label break.go]

package main



import "fmt"



func main() {

	for i := 0; i < 10; i++ {

		if i == 5 {

			fmt.Println("Breaking out of loop")

			break // break here

		}

		fmt.Println("The value of i is", i)

	}

	fmt.Println("Exiting program")

}

				
			

Este pequeno programa cria um loop do tipo "for" que irá iterar enquanto i for menor que 10.

Dentro do loop do tipo "for", há uma instrução if. A instrução if testa a condição de i para ver se o valor é menor que 5. Se o valor i não for igual a 5, o loop continua e imprime o valor de i. Se o valor de i for igual a 5, o loop irá executar a instrução break, imprimir que ele está Breaking out of loop [Saindo do loop] e parar de executar o loop. Ao final do programa, imprimimos Exiting program [Saindo do programa] para exprimir que saímos do loop.

Quando executarmos esse código, nosso resultado será o seguinte:

				
					
[secondary_label Output]

The value of i is 0

The value of i is 1

The value of i is 2

The value of i is 3

The value of i is 4

Breaking out of loop

Exiting program

				
			

Isso mostra que, uma vez que o número inteiro i é avaliado como equivalente a 5, o loop interrompe, uma vez que o programa é orientado a fazer isso com a instrução break.

Loops aninhados

É importante lembrar que a instrução break irá parar apenas a execução do loop mais interno em que for chamada. Se tiver um conjunto aninhado de loops, será necessário uma interrupção para cada loop se desejar.

				
					
[label nested.go]

package main



import "fmt"



func main() {

	for outer := 0; outer < 5; outer++ {

		if outer == 3 {

			fmt.Println("Breaking out of outer loop")

			break // break here

		}

		fmt.Println("The value of outer is", outer)

		for inner := 0; inner < 5; inner++ {

			if inner == 2 {

				fmt.Println("Breaking out of inner loop")

				break // break here

			}

			fmt.Println("The value of inner is", inner)

		}

	}

	fmt.Println("Exiting program")

}

				
			

Neste programa, temos dois loops. Embora ambos iterem 5 vezes, cada um tem uma instrução condicional if com uma instrução break. O loop exterior será interrompido se o valor outer for igual a 3. O loop interno será interrompido se o valor inner for 2.

Se executarmos o programa, veremos o seguinte resultado:

				
					
[secondary_label Output]

The value of outer is 0

The value of inner is 0

The value of inner is 1

Breaking out of inner loop

The value of outer is 1

The value of inner is 0

The value of inner is 1

Breaking out of inner loop

The value of outer is 2

The value of inner is 0

The value of inner is 1

Breaking out of inner loop

Breaking out of outer loop

Exiting program

				
			

Note que cada vez que o loop interno é interrompido, o loop exterior não é. Isso acontece porque o break irá interromper apenas o loop mais interno de onde for chamado.

Vimos de que maneira o uso da instrução break irá interromper a execução de um loop. Em seguida, vamos ver como é possível continuar a iteração de um loop.

Instrução continue

A instrução continue é usada quando você quer pular a parte restante do loop, retornar ao topo do loop e dar continuidade a uma nova iteração.

Tal como com a instrução break, a instrução continue é comumente usada com uma instrução condicional if.

Usando o mesmo programa de loop do tipo "for" que na seção anterior da Instrução break, usaremos uma instrução continue, em vez de uma instrução break:

				
					
[label continue.go]

package main



import "fmt"



func main() {

	for i := 0; i < 10; i++ {

		if i == 5 {

			fmt.Println("Continuing loop")

			continue // break here

		}

		fmt.Println("The value of i is", i)

	}

	fmt.Println("Exiting program")

}

				
			

A diferença entre usar a instrução continue, em vez de uma instrução break, é que o nosso código continuará apesar da interrupção quando a variável i for avaliada como equivalente a 5. Vamos ver nosso resultado:

				
					
[secondary_label Output]

The value of i is 0

The value of i is 1

The value of i is 2

The value of i is 3

The value of i is 4

Continuing loop

The value of i is 6

The value of i is 7

The value of i is 8

The value of i is 9

Exiting program

				
			

Aqui, vemos que a linha The value of i is 5 [O valor de i é 5] nunca ocorre no resultado, mas o loop continua após aquele ponto para imprimir linhas para os números 6-10 antes de sair do loop.

Você pode usar a instrução continue para evitar um código condicional extremamente aninhado, ou para otimizar um loop, eliminando casos que ocorram com frequência e que você gostaria de rejeitar.

A instrução continue faz com que um programa pule certos fatores que surjam dentro de um loop, mas depois continuem pelo restante do loop.

Conclusão

As instruções break e continue em Go permitirão que você use loops do tipo "for" de maneira mais eficaz em seu código.