Es scheint, als wäre es erst jetzt, aber als ich anfing zu programmieren, haben sich sicher alle gefragt, wie man Anweisungen für und während richtig verwendet.
Es scheint, dass die allgemeine Literatur in der Welt oft sagt, dass ** für die Aussage verwendet wird, wenn die Anzahl der Wiederholungen klar ist **.
Für mich kam mir diese Erklärung jedoch nicht in den Sinn.
Als ich heute das Programm schrieb, fand ich endlich einen Punkt in mir über diesen Unterschied, also werde ich ihn hier aufzeichnen.
Unten in JavaScript beschrieben.
class Iterator {
index = 0;
constructor(list) {
this.list = list;
}
next() {
return this.list[this.index++];
}
}
const iterator = new Iterator([1, 2, 3, 4, 5]);
Bereiten Sie die Iterator-Klasse mit der obigen Implementierung vor (tatsächlich können Sie sich die Dateiliste usw. vorstellen). Angenommen, Sie möchten den Vorgang des Zählens der Anzahl der Elemente bei der Ausgabe aller Elemente beschreiben. Anfangs habe ich den folgenden Code geschrieben [^ 1].
let count = 0, item;
while (item = iterator.next()) {
console.log(item);
count++;
}
console.log(`Menge: ${count}`);
Versuchen Sie, den Code wie folgt neu zu schreiben, um ihn besser lesbar zu machen:
let count, item;
for (count = 0; item = iterator.next(); count++) {
console.log(item);
}
console.log(`Menge: ${count}`);
Ich habe es umgeschrieben ... Dieser Code ist sicherlich kürzer, aber ist es nicht sehr schwer zu lesen?
Vielleicht liegt der Grund dafür, dass wir
for (A; B; C) {}
Unbewusst, als ich den Satz sah
For A, while B, do C.
Mit anderen Worten, ich denke, das liegt daran, dass ich ** A, C während B ** gelesen habe. Wenn ich hier die eigentliche Formel anwende, fühle ich mich aus diesem Grund sehr unwohl, wenn sie nicht als Satz gilt.
Wenn Sie etwas weiter gehen möchten, müssen Sie die Anweisung A, dh die Initialisierungsformel **, kennen. Solange das Wort "für" (about =) verwendet wird, sind B, C und die Sätze im Block an diesen A-Teil gebunden, auch wenn Sie ihn nicht mögen.
Das Seltsame am obigen Beispiel für die for-Anweisung ist, dass, obwohl der Initialisierungsausdruck zum Initialisieren der Variablen "count" verwendet wird, der Ausdruck der Fortsetzungsbedingung und die Anweisung im Block vollständig mit "count" zusammenhängen Es war, weil es so etwas nicht gab.
Von den Wiederholungen, die durch die while-Anweisung ausgedrückt werden können, diejenigen, die durch die for-Anweisung ausgedrückt werden sollten
Ich denke, man kann sagen, dass es befriedigt.
Um es anders herum auszudrücken, solange die oben genannten Regeln erfüllt sind, gibt es Dinge, die mit der for-Anweisung geschrieben werden können, auch wenn die allgemein bekannte "Anzahl der Wiederholungen bekannt ist" nicht erfüllt ist. Was ist mit dem folgenden Beispiel?
class Iterator {
index = 0;
constructor(list) {
this.list = list;
}
get currentItem() {
return this.list[this.index];
}
next() {
this.index++;
}
}
let count = 0;
for (
const iterator = new Iterator([1, 2, 3, 4, 5]);
iterator.currentItem;
iterator.next()
) {
console.log(iterator.currentItem);
count++;
}
console.log(`Menge: ${count}`);
Es fühlt sich nicht zu seltsam an, oder? ?? ??
[^ 1]: Wenn in JavaScript auf einen Index außerhalb des Bereichs des Arrays zugegriffen wird, tritt kein Fehler auf und ein falscher Wert von "undefined" wird zurückgegeben. Aus diesem Grund gibt die "next" -Methode bei jeder Ausführung ein Element zurück und "undefined", wenn alle erledigt sind.
Recommended Posts