A declaração do-while
Java também permite a criação de um loop do-while , que como um loop while, é um estrutura de controle de repetição com uma condição de terminação e declaração, ou bloco de instruções, como mostra a Figura 2.6. Ao contrário de um laço while , no entanto, um loop do-while garante que a declaração ou bloco seja executado pelo menos uma vez.
A principal diferença entre a estrutura sintática de um loop do-while e um loop while é que um loop do-while ordena propositalmente a declaração ou bloco de instruções antes da expressão condicional, a fim de reforçar que a declaração será executada antes e a expressão será sempre avaliada. Por exemplo, dê uma olhada na saída das seguintes afirmações:
int x = 0;
do {
x++;
} while(false);
System.out.println(x); // Outputs 1
Java executará o bloco de instruções primeiro e, em seguida, verificará a condição do loop. Até que o loop saia imediatamente, o bloco de instrução foi executado uma vez e o programa gera um 1.
Quando usar while ou do-while
Na prática, pode ser difícil determinar quando você deve usar um loop while e quando você deve usar um loop do-while. A resposta curta é que isso realmente não importa. Qualquer loop while pode ser convertido em um loop do-while, e vice-versa. Por exemplo, compare este loop while:
while(x > 10) {
x--;
}
e esse loop do-while:
if(x > 10) {
do {
x--;
} while(x > 10);
}
Embora um dos loops seja certamente mais fácil de ler, eles são funcionalmente equivalentes. Java recomenda o uso de um loop while quando um loop não pode ser executado em todos e um do-while loop quando o loop é executado pelo menos uma vez. Mas determinar se você deveria usar um loop while ou um loop do-while na prática é, sobre a preferência pessoal e legibilidade de código.
Por exemplo, embora a primeira instrução seja mais curta, a segunda tem a vantagem que você poderia aproveitar a declaração if-then existente e executar alguma outra operação em uma nova ramificação else , conforme mostrado no exemplo a seguir:
if(x > 10) {
do {
x--;
} while(x > 10);
} else {
x++;
}