O laço While
O laço While é útil para repetir a execução de um bloco de código um número variável de vezes. Para determinar se um bloco de código deve ser executado usando uma condição booleana como um If.
A instrução é a seguinte:
- While [CondiçãoBoleana]
- ...
- EndWhile
No loop While acima o bloco de código será executado caso a condição booleana for True. Depois que o bloco de código for executado, o While reavalia a condição e se ainda for True, será executado até a condição se tornar false.
Quando a condição for False, o fluxo de execução continua com a instrução imediatamente após sua instrução EndWhile.
Por exemplo:
- a = 0
- While a <= 10
- a = a + 1
- EndWhile
Neste exemplo, o loop é executado até que a variável "a" excede o valor 10. A condição inicial de fato retorna True se for menor ou igual a 10.
É sua responsabilidade garantir que a condição booleana mais cedo ou mais tarde torna-se falsa. Se isso não ocorrer, o corpo do loop será executado um número infinito de vezes. Para prevenir esse risco, foi imposto um limite de cerca de 250.000 iterações, então o While emite um erro. Os loops infinitos são um dos erros mais comuns de programação, você deve ter sempre muito cuidado ao construir um loop.
Por exemplo:
- a = 0
- While a <= 10
- a = a - 1
- EndWhile
No exemplo, a condição será sempre True porque o valor da variável "a" está sendo subtraída,por tanto nunca será maior que 10. Então o ciclo tende a ser realizado um número infinito de vezes. Após cerca de 250.000 iterações a execução terminará com um erro.
Vimos o laço clássico, em que a condição booleana é expressa e executada na parte superior. A condição booleana inicial permite que você evite executar o bloco de código caso não seja necessário.
- While
- ...
- EndWhile [CondizioneBooleana]
Ao contrário da condição fixada no início, se a condição booleana no final for True o loop é encerrado. A palavra-chave EndWhile sempre é usada para delimitar o final de um laço While. Em seguida, o fim do While (End of While) ocorrerá se a condição for True.
Por exemplo:
- a = 0
- While
- a = a + 1
- EndWhile a > 10
Neste caso, o bloco do While loop é executado pelo menos uma vez. A iteração de loop termina quando a variável "a" é maior que 10.
A condição booleana pode ser colocada no início do loop e, em seguida, o bloco de código é executado se a condição for True. Ou a condição pode ser colocada no final do ciclo, e neste caso o ciclo termina se a condição for True. Uma característica especial é que a condição pode ser colocada imediatamente no início e no fim, recebendo dois condicionais, verificados no início e no final do loop. Esta situação especial tem um sentido real, se as duas condições controlam variáveis diferentes.
Por exemplo:
- a = 0
- b = 0
- While a <= 10
- a = a + 1
- b = Random(10)
- EndWhile b >= 5
O exemplo acima ilustra o uso da dupla condição. O bloco é executado se a variável "a" for menor ou igual a 10, ou termina caso a variável "b" for maior ou igual a 5. A variável "b" em cada iteração recebe um valor aleatório, variando de 0 a 9.
O corpo de um loop pode conter outro loop, onde é conhecido como loops aninhados.
Por exemplo:
- a = 0
- While a <= 10
- b = Random(10)
- While b < 5
- // Faz alguma coisa.
- EndWhile
- a = a + 1
- EndWhile
O ciclo secundário será executado somente se a variável "b" for menor que 5. A variável "b" em cada iteração do ciclo primário é recebe um valor aleatório de 0 a 9.
A iteração de um cíclulo loop pode ser finalizado usando a instrução Break. Quando a instrução Break é encontrada, a execução passa para a próxima instrução imediatamente após o corpo do loop.
Por exemplo:
- a = 0
- While a <= 10
- b = Random(10)
- If b = 5
- Break
- EndIf
- a = a + 1
- EndWhile
No exemplo anterior, se a variável "b" for igual a 5, o ciclo terminará, caso contrário continuará com todas as iterações. Geralmente a instrução Break não deve ser usada, tendo as ferramentas mais adequadas para escrever um loop. No entanto, em caso de necessidade, você pode tolerar o uso.
A instrução Continue tem um efeito semelhante ao break na execução do loop. Mas ao contrário do intervalo, a execução retorna à parte superior ou inferior (dependendo de onde a condição booleana for interrompida) e, se necessário, o corpo do loop é repetido.
Por exemplo:
- a = 0
- While a <= 10
- b = Random(10)
- If b = 5
- Continue
- EndIf
- a = a + 1
- EndWhile
No exemplo anterior, se a variável "b" for igual a 5, o laço é repetido, portanto, a variável "a" não é incrementada. Em vez disso, no próximo exemplo, a condição é colocada no final, em seguida, a instrução Continue ignora a execução no final do ciclo.
- a = 0
- While
- b = Random(10)
- If b = 5
- Continue
- EndIf
- a = a + 1
- EndWhile a > 10
Se o loop tiver uma verificação dupla da condição, a instrução Continue sempre executará a condição de início do salto. Bem como a instrução Break, Continue, pode ser substituído por instruções mais eficientes que farão com que seu código fique mais legível.