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

Fehlende Return-Anweisung in der bedingten for-Schleife

PHPz
PHPznach vorne
2024-02-09 12:30:09820Durchsuche

带条件的 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
    }
}

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?

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
    }
}

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
    }
}

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
}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen