Il s'agit en quelque sorte d'une réponse indirecte, mais cette question m'a fait réfléchir à la logique qui la sous-tend, et j'ai pensé que cela valait la peine d'être partagé.
Comme tout le monde l'a dit, vous utilisez un do ... while
lorsque vous voulez exécuter le corps au moins une fois. Mais dans quelles circonstances voudriez-vous faire cela ?
Eh bien, la catégorie la plus évidente de situations auxquelles je peux penser serait quand la valeur initiale ("non amorcée") de la condition de contrôle est la même que celle du moment où vous voulez sortir. . Cela signifie que vous devez exécuter le corps de la boucle une fois pour amorcer la condition à une valeur non-existante, puis effectuer la répétition réelle en fonction de cette condition. Les programmeurs étant si paresseux, quelqu'un a décidé d'emballer tout cela dans une structure de contrôle.
Ainsi, par exemple, la lecture de caractères à partir d'un port série avec un délai d'attente pourrait prendre la forme (en 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)
Notez la duplication du code : char_read = port.read(1)
. Si Python avait un do ... while
boucle, j'aurais pu utiliser :
do:
char_read = port.read(1)
response_buffer.append(char_read)
while char_read
L'avantage supplémentaire pour les langages qui créent une nouvelle portée pour les boucles : char_read
ne pollue pas l'espace de noms des fonctions. Mais notez également qu'il existe une meilleure façon de procéder, à savoir l'utilisation de la fonction Python None
valeur :
response_buffer = []
char_read = None
while char_read != '':
char_read = port.read(1)
response_buffer.append(char_read)
response = ''.join(response_buffer)
Voici donc l'essentiel de mon point de vue : dans les langages avec des types nuls, la situation est la suivante initial_value == exit_value
se produit beaucoup moins fréquemment, et que peut être la raison pour laquelle vous ne le rencontrez pas. Je ne dis pas que cela n'arrive jamais, parce qu'il y a toujours des moments où une fonction retourne None
pour signifier une condition valide. Mais, à mon avis, cela arriverait beaucoup plus souvent si les langages que vous utilisez ne permettaient pas d'avoir une valeur qui signifie : cette variable n'a pas encore été initialisée.
Ce n'est pas un raisonnement parfait : en réalité, maintenant que les valeurs nulles sont courantes, elles constituent simplement un élément supplémentaire de l'ensemble des valeurs valides que peut prendre une variable. Mais en pratique, les programmeurs ont un moyen de faire la distinction entre une variable se trouvant dans un état sensible, qui peut inclure l'état de sortie de boucle, et une variable se trouvant dans un état non initialisé.
48 votes
Pour ce que ça vaut, après une décennie de programmation dans ma carrière, j'ai utilisé une boucle do-while une ou deux fois.
0 votes
@Matt - Cela me fait me sentir mieux. Au moins, cela signifie que je ne suis pas seul.
2 votes
Je suis d'accord avec Matt et j'ajouterai une autre décennie à cela. Je n'utilise jamais la boucle do-while non plus.
0 votes
MANY duplicata. En voici un qui renvoie à plusieurs d'entre eux : stackoverflow.com/questions/3094972/
0 votes
Python n'a même pas de boucles Do While. La plupart des fois où vous en aurez besoin, vous pourrez trouver une autre façon de résoudre le problème.
0 votes
@DuplicateWhistleBlowers - Je vous promets que j'ai essayé de rechercher ceci sur stack overflow (même mon titre n'a pas donné de résultats similaires). Je pense que c'était à cause de mon utilisation de "do...while" ? Désolé pour le double affichage.
3 votes
La bonne "question principale" semble être stackoverflow.com/questions/224059/
0 votes
Puisque les deux cibles de dupe ont été fusionnées dans une question subjective qui a été fermée pour avoir demandé une discussion, réouverture.
0 votes
Duplicata possible de Tester les boucles en haut ou en bas (while vs. do while) ?