Heim > Backend-Entwicklung > Golang > Fehlende Return-Anweisung in der bedingten for-Schleife

Fehlende Return-Anweisung in der bedingten for-Schleife

PHPz
Freigeben: 2024-02-09 12:30:09
nach vorne
846 Leute haben es durchsucht

带条件的 for 循环中缺少 return 语句

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.

Frageninhalt

Mir ist aufgefallen, dass der Compiler beim Schreiben des folgenden Codes missing return statements 错误:

erzeugt
// 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
    }
}
Nach dem Login kopieren

In diesem Fall wird Folgendes fehlerfrei kompiliert:

func TestMethod() int {
    for {
        return 0
    }
}
Nach dem Login kopieren

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?

Workaround

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
    }
}
Nach dem Login kopieren

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.

Bonusmaterialien

Warum ist die zweite Funktion also in Ordnung?

func TestMethod() int {
    for {
        return 0
    }
}
Nach dem Login kopieren

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

keine 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 语句是否可达; 它们只需要存在。例如即使 breakEs ist auch erwähnenswert, dass es keine Kontrollflussanalyse gibt, um festzustellen, ob irgendwelche break-Anweisungen erreichbar sind

sie müssen nur existieren🎜. Folgendes löst beispielsweise einen Kompilierungsfehler „fehlende Rückgabe“ aus, obwohl auf break eindeutig nicht zugegriffen werden kann: 🎜
func foo() int {
    for {
        if false {
            break
        }
        return 0
    }
    // <-- error: missing return
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage