Essa é uma resposta meio indireta, mas essa pergunta me fez pensar sobre a lógica por trás dela e pensei que valeria a pena compartilhar isso.
Como todo mundo já disse, você usa um do ... while
loop quando deseja executar o corpo pelo menos uma vez. Mas em que circunstâncias você gostaria de fazer isso?
Bem, a classe de situações mais óbvia que posso pensar seria quando o valor inicial ("não ativado") da condição de verificação é o mesmo de quando você deseja sair . Isso significa que você precisa executar o corpo do loop uma vez para preparar a condição para um valor não existente e, em seguida, executar a repetição real com base nessa condição. Com os programadores sendo tão preguiçosos, alguém decidiu encerrar isso em uma estrutura de controle.
Portanto, por exemplo, a leitura de caracteres de uma porta serial com um tempo limite pode assumir a forma (em Python):
response_buffer = []
char_read = port.read(1)
while char_read:
response_buffer.append(char_read)
char_read = port.read(1)
# When there's nothing to read after 1s, there is no more data
response = ''.join(response_buffer)
Observe a duplicação do código: char_read = port.read(1)
. Se Python tivesse um do ... while
loop, eu poderia ter usado:
do:
char_read = port.read(1)
response_buffer.append(char_read)
while char_read
O benefício adicional para idiomas que criam um novo escopo para loops: char_read
não polui o namespace da função. Mas observe também que há uma maneira melhor de fazer isso, e é usando o None
valor do Python :
response_buffer = []
char_read = None
while char_read != '':
char_read = port.read(1)
response_buffer.append(char_read)
response = ''.join(response_buffer)
Portanto, aqui está o ponto crucial do meu ponto: em linguagens com tipos anuláveis, a situação initial_value == exit_value
surge muito menos freqüência, e que pode ser por isso que você não encontrá-lo. Não estou dizendo que isso nunca aconteça, porque ainda há momentos em que uma função retornará None
para significar uma condição válida. Mas, na minha opinião apressada e brevemente considerada, isso aconteceria muito mais se as linguagens que você usou não permitissem um valor que significa: esta variável ainda não foi inicializada.
Este não é um raciocínio perfeito: na realidade, agora que os valores nulos são comuns, eles simplesmente formam mais um elemento do conjunto de valores válidos que uma variável pode assumir. Mas, na prática, os programadores têm uma maneira de distinguir entre uma variável estar em estado sensível, que pode incluir o estado de saída do loop, e ela estar em um estado não inicializado.