Blog Formação DEV

while e do/while

Você já se perguntou por que os laços while e do...while são tão parecidos, mas têm resultados tão diferentes? Neste artigo, vamos explorar essa diferença e aprender como usar os dois laços da forma correta. Continue lendo para saber mais!
while e do/while
Texto de: Cristina Leandro

Introdução

Os laços while e do/while fazem parte dos laços de repetição mais utilizados em programação. Ambos são utilizados para executar um bloco de código repetidamente até que uma condição seja satisfeita, mas apesar das semelhanças no nome, existe uma diferença muito significativa entre eles que veremos neste artigo.

Entendendo laços

Um laço, ou um loop, é uma estrutura de controle que realiza uma sequência de instruções. Essa sequência é repetida várias vezes até que uma determinada condição seja alcançada.

Existem vários tipos de laços, como for, for in, for each, while e do/while, mas o foco deste artigo será especificamente em como e quando usar o laço while e o laço do/while, tópico que pode ser confuso para quem está iniciando no mundo da programação. Para isso, vamos entender como esses dois laços funcionam individualmente.

Sintaxe do laço While

A sintaxe do laço while é assim:

while (condição) {
  instrução
} 

Ou seja, esse laço começa avaliando a condição. É feita essa verificação no início do laço e caso a condição retorne true (verdadeiro) o laço irá executar a instrução dentro das chaves. Caso essa condição seja avaliada e retorne false (falso), a instrução dentro do bloco não será executada e assim o loop acaba.

Exemplo com While

Agora que sabemos, em teoria, como o laço while funciona, vamos escrever um código que irá “contar” até 10 usando esse laço:

// Primeiro vamos criar uma variável com valor 
let i = 1;

// Aqui é feito a condição do laço
while ( i <= 10 ) {
    // Para exibir a variável i no console
    console.log( i );

    // Incrementando +1 para a variável i a cada repetição
    i++;
} 

O output esperado para esse código, e você pode fazer o teste na sua máquina, é:

1
2
3
4
5
6
7
8
9
10 

Vamos lembrar que While é uma palavra que vem do inglês e significa enquanto. Se nós tentarmos “traduzir” esse código para o português, teríamos algo parecido com isso:

enquanto (variável i for menor ou igual a 10 ) {
	imprima o valor da variável i no console;
	some mais um no valor da variável i;
} 

Então, assim, o código começa com a variável i tendo o valor de 1. Ao passar pelo laço pela primeira vez sua condição é verificada, e, já que, 1 é menor que 10, a condição retorna true, assim o primeiro número é impresso no console. Logo após essa impressão é incrementado +1 a variável i, que agora, passa a ter o valor 2. Novamente a condição será avaliada, e, como o valor 2 continua sendo menor que 10, a condição novamente será verdadeira e a instrução será executada. Isso se repetirá e o loop acabará quando a variável i chegar ao valor de 10, o que faz com que a condição seja falsa e o laço pare de repetir.

Sintaxe do laço do/while

A sintaxe do laço do/while pode ser vista abaixo:

do {
  // instrução
} while (condição); 

O laço do/while é parecido com o laço while e, por vezes, isso acaba gerando confusão. Repare que diferente do laço while, o do/while começa executando a instrução antes de verificar ela e isso acaba fazendo uma grande diferença, na prática.

Isso significa que, essencialmente, toda declaração será executada pelo menos uma vez, mesmo que a condição do laço seja falsa. Para entender mais, na prática, agora vamos reescrever aquele código que “conta” até 10, mas primeiro faremos isso com as mesmas condições usadas no laço while:

// Primeiro vamos criar uma variável com valor 1
var i = 1;
do {
// Incrementando +1 para a variável i a cada repetição
   i++
// Para exibir a variável i no console
   console.log(i)
// Aqui é feita a condição
} while (i <= 10); 

Nesse caso, o output esperado é:

2
3
4
5
6
7
8
9
10
11 

Diferente do primeiro código, usando o laço while e usando a mesma condição while (i <= 10), o resultado foi diferente.

Mas, por que isso?

Primeiro, vamos lembrar que Do também é uma palavra que vem do inglês e significa fazer/realizar. Vamos “traduzir” o código para o português novamente para entender o que aconteceu.

faça {
		some mais um a variável i
		imprima o valor de i no console
} enquanto (variável i for menor ou igual a 10 ) 

Repare que a variável i é incrementada antes de ser impressa no console, então o primeiro número impresso acaba sendo o 2.

Outra diferença entre os resultados é que o último número impresso no laço while foi o 10, enquanto no laço do/while foi o 11. Isso acontece porque, no laço do/while, quando a variável i é incrementada e passa a ter o valor de 10, as instruções definidas dentro do bloco de código são executadas novamente para que então a condição seja avaliada como falsa, o que finalizará o laço.

É importante entender a diferença entre os dois laços e quando usá-los justamente porque se você não souber, pode obter resultados completamente diferentes do que achou que teria e até prejudicar uma aplicação maior.

Veja abaixo uma versão corrigida do código que de fato vai "contar" até 10 utilizando a estrutura do/while:

let i = 0;

do {
   i++
   console.log(i)
} while (i <= 9); 

Assim, foi alterado o valor inicial da variável i e uma alteração na condição do/while foi feita. Dessa forma, se você testar na sua máquina, terá o resultado esperado:

1
2
3
4
5
6
7
8
9
10 

Entender como as estruturas funcionam facilita para podermos atender suas necessidades de forma mais eficiente.

Conclusão e resumo

De forma bem resumida, as duas estruturas, while e do/while funcionam basicamente como a dinâmica do bom policial e mau policial. O bom policial bate na porta primeiro e entra depois, o mau policial entra primeiro e bate na porta depois. O laço while é executado enquanto a condição for verdadeira e o laço do/while é executado primeiro e só depois se faz a verificação da condição.

Sobre o autor
Cod3r

Cod3r

Com mais de 400 mil alunos, a Cod3r é uma das principais escolas de tecnologia do País. Um de seus produtos mais importantes é a Formação DEV, com objetivo de preparar os profissionais para o mercado.

Ótimo! Inscreveu-se com sucesso.

Bem-vindo de volta! Registou-se com sucesso.

Assinou com sucesso o Blog Formação DEV .

Sucesso! Verifique o seu e-mail para obter o link mágico para se inscrever.

As suas informações de pagamento foram atualizadas.

Seu pagamento não foi atualizado.