Récemment, dans un livre, j'ai lu ce code. Pouvez-vous définir les moyens de ce code et comment ce code fonctionne.Comment cette boucle fonctionne dans C#
int i = 0;
for (; i != 10;)
{
Console.WriteLine(i);
i++;
}
Récemment, dans un livre, j'ai lu ce code. Pouvez-vous définir les moyens de ce code et comment ce code fonctionne.Comment cette boucle fonctionne dans C#
int i = 0;
for (; i != 10;)
{
Console.WriteLine(i);
i++;
}
Il boucle.
Étant donné que vous avez déjà défini i=0
ci-dessus, ils ont omis cette section de la boucle for
. En outre, puisque vous incrémentez la variable à la fin, ils l'ont également omis.
Ils ont simplement tourné une boucle for dans une boucle while.
Il serait probablement plus élégante que:
int i = 0;
while(i != 10)
{
Console.WriteLine(i);
i++;
}
en plus d'initialiser i en dehors de la boucle pour lui donner une plus grande portée, cela permet également à l'incrémenteur d'être effectué sur une condition dans la boucle, par ex. i + = 2 ou i-- ou quelque chose, sans avoir à compenser pour ce qui a été spécifié dans la troisième partie de la boucle for. Mais oui, même comme un temps, je pense que – Jacob
@Jacob, +1 pour la capture de la portée, je ne pensais même pas à ce sujet. –
S'il est plus facile de voir sous forme normale, il est presque l'équivalent de ceci:
for (int i = 0; i != 10; i++)
{
Console.WriteLine(i);
}
À l'exception qu'il laisse i
disponible pour l'utilisateur une fois la boucle terminée, il n'est pas limité à la boucle for
.
Il est le même que cette boucle:
for (int i = 0; i != 10; i++) {
Console.WriteLine(i);
}
Sauf, la i
variable est déclarée en dehors de la boucle, il est donc la portée est plus grande.
Dans une boucle for
, le premier paramètre est l'initialisation, le second est la condition et le troisième est l'incrément (qui peut être à peu près tout). Le livre montre comment l'initalisation et l'incrément sont déplacés à l'endroit du code où ils sont réellement exécutés. La boucle peut aussi montrer que la boucle while
équivalente:
int i = 0;
while (i != 10) {
Console.WriteLine(i);
i++;
}
Voici également déclaré la i
variable en dehors de la boucle, de sorte que la portée est plus grande.
Vous utilisez « pour », comme un « tout »
Ce code pourrait être réécrite, (dans le contexte de l'extrait de code - il est équivalent comme indiqué.) Que:
for (int i = 0; i != 10; i++)
Console.WriteLine(i);
Fondamentalement, l'expression d'initialisation et l'expression d'incrémentation ont été retirées de l'expression de boucle for, qui sont purement facultatives.
Je noterais que ce que vous avez posté n'est pas * équivalent *, il y a une différence de portée. –
Merci @Nick, édité selon votre suggestion. –
Il est le même que:
for (int i = 0; i != 10; i++) {
Console.WriteLine(i);
}
S'il vous plaît ne pas écrire du code comme ça. Il est juste moche et vainc le but de for-loops.
L'instruction for est défini dans le C# spec comme
pour (pour-initialiseur; à condition; pour-itérateur) -déclaration incorporé
Tous les trois de pour-initialiseur, pour-condition, un d pour l'itérateur sont optionnels. Le code fonctionne parce que ces pièces ne sont pas nécessaires.
Pour les curieux: si pour condition est supprimée, la boucle se comporte comme s'il y avait un pour condition qui a produit vrai. Ainsi, il agirait comme boucle infinie, ce qui nécessite une instruction de saut à quitter (pause, goto, jet ou retour).
Comme int i
a été déclaré en haut de sorte qu'il n'était pas dans la boucle for. cela est tout à fait comme
for(int i = 0; i!=10; i++)
{
/// do your code
}
Intéressant, pas vu ça avant ... – Yoda
@Yoda - Probablement parce que sa mauvaise forme. Légal, mais mauvaise forme. –
Surpris vous n'avez pas de critiques pour cette question. +1 pour revenir aux bases. –