## Loops Do .. while (faça .. enquanto)

Algumas células do mundo são amarelas, mas seu buggle não pode ficar sobre estas células. Escreva o código necessário para mover para a frente até que o chão fique branco. Para isto use o método fornecido `chãoBranco()`.

O truque é que a maioria dos buggles deste mundo ficam sobre o chão amarelo que eles não gostam. é por isto que eles estão em pânico, e cada buggle "rushes" uma célula para a frente, mesmo aqueles que não estavam numa célula amarela no começo. Em outras palavras, mesmo se o chão for branco na primeira célula, você ainda vai querer se mover para a próxima célula.

A ideia geral é fazer algo como:

    Mover para a frente até estar numa célula branca

A coisa mais difícil é que nós queremos executar o corpo do loop uma vez, mesmo se já estivermos numa célula branca. Isto é fácil duplicando o código do loop'antes do loop em si, mas esta é uma má ideia: diplicação de código é um hábito muito ruim, e você deve evitar isto sempre.

Duplicação de código faz da manutenção de código um pesadelo rapidamente: é fdifícil ler o código e o leitor tem que garantir que nenhuma pequena diferença exista entre as versões. Depurar o código se torna difícil, pois os bugs devem ser consertados em todas as versões. Na verdade, cada modificação do código se torna difícil. Então, na verdade, você deve sempre se esforçar para não duplicar seu código sempre que possível. Mas a boa notícia é que você sempre pode...

### Executando o corpo do loop pelo menos uma vez

[!python]

Algumas linguagens tem construções específicas para isto, mas não a linguagem Python. Sem problemas, podemos fazer isto nós mesmos! Uma boa forma é ter uma variável dedicada indicando se estamos entrando no loop a primeira vez ou não, como segue.

    primeiraVez = True
    while primeiraVez or (outras condições):
      primeiraVez = False
      (corpo do loop)

Quando `primeiraVez` é true, o corpo do loop é executado mesmo se as outras condições digam o contrário. uma vez que o loop tenha sido executado uma vez, esta variável vira false e nunca mais impacta na decisão de entrar ou não no loop.

[/!] [!java|scala|c]

Num loop `while`, a condição é calculada antes de qualquer coisa, e se for falsa, o corpo do loop nunca é executado. Algumas vezes (mas não muito frequentemente), você pode preferir que o corpo do loop seja executado pelo menos uma vez, mesmo se a condição seja inicialmente falsa. Para isto, uma variação do loop `while` é usada, com a seguinte sintaxe em [!thelang]. [!java|c]Não esqueça o ponto-e-vírgula (;) depois da condição, que é obrigatório.[/!]

    do {
        ação()[!java];[/!]
    } while (condição)[!java];[/!]

[/!]