In PHP ist die for-Schleife eine gängige Iterationsstruktur, die zum wiederholten Ausführen eines Codeabschnitts verwendet wird. Manchmal vergessen wir jedoch möglicherweise, eine Return-Anweisung in eine bedingte for-Schleife einzufügen, was dazu führt, dass das Programm die Ergebnisse nicht normal zurückgibt. In diesem Fall empfiehlt PHP-Editor Yuzai, den Code rechtzeitig zu überprüfen, um sicherzustellen, dass der Schleife entsprechende Return-Anweisungen hinzugefügt werden, um unerwartete Fehler zu vermeiden. Dies kann die Zuverlässigkeit und Korrektheit des Codes sicherstellen und die Effizienz und Wartbarkeit des Programms verbessern.
Mir ist aufgefallen, dass der Compiler beim Schreiben des folgenden Codes missing return statements 错误
:
// Similar loops make sense in retry patterns // but this is just a simple example func TestMethod() int { for i := 0; i < 10; i++ { return 0 } }
In diesem Fall wird Folgendes fehlerfrei kompiliert:
func TestMethod() int { for { return 0 } }
Der erste Code ist logisch und technisch in Ordnung, da es unmöglich ist, dass die Methode fehlschlägt. Gibt es einen Grund, warum der Compiler diesen Fehler anzeigt? Oder liegt es an einer fehlenden Logik oder einem Fehler?
Wenn man den Kommentar von @Cerise Limón zu einer Antwort erweitert, ist die Behauptung, dass „der erste Code... technisch in Ordnung ist“, falsch.
Die Go-Sprachspezifikation besagt Folgendes:
Außerdemund das:
(Hervorhebung von mir hinzugefügt)
Wenn wir den Code in der ersten Funktion untersuchen, können wir erkennen, dass diese Bedingungen der Spezifikation nicht erfüllt sind:
func TestMethod() int { for i:= 0; i < 10; i++ { return 0 } }
Die Funktion verfügt über einen Ergebnisparameter (int
返回值),因此必须以终止语句结束,但该函数的最终语句是 for
Anweisung mit einer Bedingung , d. h. ist keine „Abschlussanweisung“ im Sinne der Spezifikation.
Das mag seltsam erscheinen, aber es ist tatsächlich technisch korrekt.
Warum ist die zweite Funktion also in Ordnung?
func TestMethod() int { for { return 0 } }
In diesem Fall ist die letzte Anweisung in der Funktion for
, wobei bedingungslos ist und , keine Break-Anweisung hat, die auf die for-Schleife verweist und die Sprachspezifikationsdefinition einer Abschlussanweisung erfüllt.
In Ihrer Arbeit steckt Logik.
Wenn eine unbedingte for
语句包含 break
Anweisung break
enthält, kann die Schleife enden, sodass die Funktion eine Return-Anweisung erfordert.
Wenn die unbedingte for
语句不包含 break
(并且没有 return
-Anweisung
break
-Anweisung (und keine return
-Anweisung) enthält, wird die Schleife nicht beendet (zumindest nicht als Ergebnis der normalen Ausführung). Pfad) erfordert Funktionsrückgabewert).
break
语句是否可达; 它们只需要存在。例如即使 break
Es ist auch erwähnenswert, dass es keine Kontrollflussanalyse gibt, um festzustellen, ob irgendwelche break
-Anweisungen erreichbar sind
break
eindeutig nicht zugegriffen werden kann: 🎜
func foo() int { for { if false { break } return 0 } // <-- error: missing return }
Das obige ist der detaillierte Inhalt vonFehlende Return-Anweisung in der bedingten for-Schleife. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!