En PHP, la boucle for est une structure d'itération courante utilisée pour exécuter à plusieurs reprises un morceau de code. Cependant, nous pouvons parfois oublier d'ajouter une instruction return dans une boucle for conditionnelle, ce qui empêchera le programme de renvoyer les résultats normalement. Dans ce cas, l'éditeur PHP Yuzai recommande de vérifier le code à temps pour s'assurer que les instructions de retour appropriées sont ajoutées à la boucle afin d'éviter des erreurs inattendues. Cela peut garantir la fiabilité et l'exactitude du code et améliorer l'efficacité et la maintenabilité du programme.
J'ai remarqué que lorsque j'écris le code suivant, le compilateur produit 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 } }
C'est à ce moment-là que ce qui suit est compilé sans aucune erreur :
func TestMethod() int { for { return 0 } }
Le premier code est logiquement et techniquement correct car il est impossible que la méthode échoue à revenir. Y a-t-il une raison pour laquelle le compilateur affiche cette erreur ? Ou s'agit-il d'une sorte de logique manquante ou d'un bug ?
En développant le commentaire de @Cerise Limón dans une réponse, l'affirmation selon laquelle "le premier code... est techniquement correct" est fausse.
La spécification du langage Go dit ceci :
Aussiet ceci :
(c'est moi qui souligne)
En inspectant le code dans la première fonction, nous pouvons voir que ces conditions de la spécification ne sont pas remplies :
func TestMethod() int { for i:= 0; i < 10; i++ { return 0 } }
La fonction a un paramètre de résultat (int
返回值),因此必须以终止语句结束,但该函数的最终语句是 for
instruction avec une condition , c'est-à-dire que n'est pas une "instruction de fin" telle que définie par la spécification.
Cela peut paraître bizarre, mais c'est en fait techniquement correct.
Alors pourquoi la deuxième fonction est-elle correcte ?
func TestMethod() int { for { return 0 } }
Dans ce cas, l'instruction finale de la fonction est for
, où est inconditionnellement et , n'a pas d'instruction break qui fait référence à la boucle for, satisfaisant la définition de spécification du langage d'une instruction de fin.
Il y a une logique dans votre travail.
Si une instruction for
语句包含 break
inconditionnelle contient break
, la boucle peut se terminer, la fonction nécessite donc une instruction return.
Si l'instruction for
语句不包含 break
(并且没有 return
inconditionnelle
d'instruction break
(et aucune instruction return
), la boucle ne se terminera pas (du moins pas à la suite de l'exécution normale path) nécessite une valeur de retour de fonction). break
语句是否可达; 它们只需要存在。例如即使 break
break
sont accessibles 🎜elles doivent simplement exister🎜 ; Par exemple, ce qui suit déclenchera une erreur de compilation « retour manquant » même si break
est clairement inaccessible : 🎜
func foo() int { for { if false { break } return 0 } // <-- error: missing return }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!