[JAVA] Verwenden Sie doch die for-Anweisung? Verwenden Sie die while-Anweisung? Ordnungsgemäße Verwendung von for-Anweisung und while-Anweisung

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.

Zusammenfassung

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.

Extremes Beispiel

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

Verwenden Sie doch die for-Anweisung? Verwenden Sie die while-Anweisung? Ordnungsgemäße Verwendung von for-Anweisung und while-Anweisung
Vergleichen Sie die Geschwindigkeit der for-Anweisung und der erweiterten for-Anweisung.
Was benötigen Sie am Ende, um eine Web-App mit Java zu erstellen? Erklären Sie den Mechanismus und was zum Lernen notwendig ist
Verwenden Sie redirect_to und rendern Sie richtig
Ordnungsgemäße Verwendung von Mockito und PowerMock
Wenn Sie eine Methode in RSpec verspotten möchten, sollten Sie die Methode allow für mock und die Singleton-Methode verwenden.
[Einführung in Ruby] Über die Rolle von true und break in der while-Anweisung
(In 1 Minute bestimmen) Wie verwende ich leer ?, Leer? Und präsent?
Richtige Verwendung der Schnittstelle und der abstrakten Klasse
Ich möchte, dass Sie Enum # name () für den Schlüssel von SharedPreference verwenden
Benötigen Sie eine speicherbewusste Implementierung von Java?
[Für Anfänger] DI ~ Die Grundlagen von DI und DI im Frühjahr ~
Bis zur Verwendung von Spring Data und JPA Part 2
Informationen zum Hinzufügen von Variablen in der iterativen Verarbeitung in der while-Anweisung
Geben Sie eine Liste der Cron-Einstellungen für alle Benutzer aus.
Bis zur Verwendung von Spring Data und JPA Part 1
Was soll ich nach Januar 2019 in Bezug auf die Ausgabe der Java-Zahlung und die Ausgabe des Java 8-Endes des Supports tun?
# 3 [Hinweis] do ~ while-Anweisung
Das n-te und n + 1-Zeichen einer Ruby-Zeichenfolge
Bequeme Verwendung von Map, die Sie nicht unerwartet kennen
Die Idee von C # (Lambda-Ausdruck, für Satz) zu kauen
[AWS / S3] Wie lädt man schließlich mehrere Dateien hoch?
Ein grundlegendes Verständnis des Flusses der rekursiven Verarbeitung anstreben
Was tun, wenn der Befehl Rails unbrauchbar wird?
Ich habe versucht, die Ergebnisse vor und nach der Date-Klasse mit einer geraden Zahl auszudrücken