Os laços servem para executar uma lógica repetidas vezes.
Os dois tipos mais comuns são o while loop (repetição indefinida) e o for loop (repetição definida, ou contada).
Existe também o laço for each, que vai aparecer em um conceito mais adiante.
O for loop é composto por um cabeçalho e um bloco de código que contém o corpo do laço envolvido em chaves.
O cabeçalho é composto por 3 componentes separados por ponto e vírgula ;: a instrução de inicialização, a condição e outra expressão.
Cada um deles pode ficar vazio.
for (init-statement; condition; expression) {
some_statement;
}
O while loop executa seu corpo enquanto sua condição for verdadeira.
O trecho de código abaixo mostra como transformar um laço for em um laço while.
init-statement;
while(condition) {
some_statement;
expression;
}
Ao trabalhar com laços, muitas vezes é preciso somar 1 ou subtrair 1 de uma variável contadora.
Isso é tão comum que a operação tem operadores especiais: ++ e --.
Eles vêm em uma forma prefixada e uma forma pós-fixada. A forma prefixada altera a variável antes do uso na instrução, e a pós-fixada, depois. Na maioria das vezes, você provavelmente vai querer a versão prefixada.
int a{3};
int b{--a};
// b is 2, a is now 2
int c{a++};
// c is 2, a is now 3
for: um exemploO componente init normalmente prepara uma variável contadora, a condição verifica se o laço deve continuar ou parar, e o componente post normalmente incrementa o contador ao final de cada repetição.
int sum{0};
for (int i{1}; i < 10; ++i) {
sum += i;
}
Este laço soma os números de 1 a 9 (incluindo o 9).
break e continue
Dentro do corpo de um laço, você pode usar a palavra-chave break para interromper totalmente a execução do laço:
int sum{2};
while(true) {
sum *= 2;
if (sum > 1000)
break;
}
// sum is now 1024
Já a palavra-chave continue apenas interrompe a execução da iteração atual e segue para a próxima:
int equal_sum{0};
for (int i{1}; i < 7; ++i) {
if (n%2 == 1) {
continue;
}
equal_sum += i;
}
// equal_sum is now 12
Observação: normalmente é mais fácil entender a lógica do laço quando o uso de
breakecontinueé minimizado ou evitado por completo.