Dies ist eine Art indirekte Antwort, aber diese Frage brachte mich dazu, über die Logik dahinter nachzudenken, und ich dachte, dies könnte es wert sein, geteilt zu werden.
Wie alle anderen gesagt haben, verwenden Sie eine do ... while
Schleife, wenn Sie den Body mindestens einmal ausführen möchten. Aber unter welchen Umständen möchten Sie das tun?
Nun, die offensichtlichste Klasse von Situationen, an die ich denken kann, ist, wenn der anfängliche ("nicht grundierte") Wert der Prüfbedingung der gleiche ist wie beim Beenden . Dies bedeutet, dass Sie den Schleifenkörper einmal ausführen müssen, um die Bedingung auf einen nicht existierenden Wert vorzubereiten, und dann die eigentliche Wiederholung basierend auf dieser Bedingung ausführen müssen. Da Programmierer so faul sind, hat sich jemand entschlossen, dies in eine Kontrollstruktur einzubinden.
So kann beispielsweise das Lesen von Zeichen von einer seriellen Schnittstelle mit Zeitüberschreitung die folgende Form annehmen (in 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)
Beachten Sie die Vervielfältigung des Codes : char_read = port.read(1)
. Wenn Python eine do ... while
Schleife hätte, hätte ich vielleicht verwendet:
do:
char_read = port.read(1)
response_buffer.append(char_read)
while char_read
Der zusätzliche Vorteil für Sprachen, die einen neuen Bereich für Schleifen erstellen: char_read
Verschmutzt den Funktionsnamespace nicht. Beachten Sie aber auch, dass es einen besseren Weg gibt, dies zu tun, und zwar unter Verwendung des Python- None
Werts:
response_buffer = []
char_read = None
while char_read != '':
char_read = port.read(1)
response_buffer.append(char_read)
response = ''.join(response_buffer)
Hier ist der Kern meines Punktes: In Sprachen mit nullbaren Typen tritt die Situation initial_value == exit_value
weitaus seltener auf, und das kann der Grund sein, warum Sie nicht darauf stoßen. Ich sage nicht, dass es nie passiert, weil es immer noch Zeiten gibt, in denen eine Funktion zurückkehrtNone
, um eine gültige Bedingung anzuzeigen. Aber meiner eiligen und kurz überlegten Meinung nach würde dies viel mehr passieren, wenn die von Ihnen verwendeten Sprachen keinen Wert zulassen, der bedeutet: Diese Variable wurde noch nicht initialisiert.
Dies ist keine perfekte Argumentation: In der Realität bilden Nullwerte, da sie nun üblich sind, einfach ein weiteres Element der Menge gültiger Werte, die eine Variable annehmen kann. In der Praxis können Programmierer jedoch unterscheiden, ob sich eine Variable in einem vernünftigen Zustand befindet, der den Schleifenausgangszustand enthalten kann, und sich in einem nicht initialisierten Zustand befindet.