Oefening: iteratielussen maken en configureren
- 14 minuten
Op het oppervlak is de for instructie een andere iteratie-instructie waarmee u een codeblok kunt doorlopen en zo de stroom van de uitvoering van uw code kunt wijzigen. Zodra we echter onderzoeken hoe elk werkt, kunnen we de nuances van elke iteratie-instructie beter identificeren en wanneer ze moeten worden gebruikt.
Wat is de for verklaring?
De for instructie doorloopt een bepaald aantal keren een codeblok. Dit besturingselementniveau maakt de for instructie uniek onder de andere iteratie-instructies. De foreach instructie doorloopt één keer een codeblok voor elk item in een reeks gegevens, zoals een matrix of verzameling. De while instructie doorloopt een codeblok totdat aan een voorwaarde wordt voldaan.
Bovendien geeft de for instructie u veel meer controle over het iteratieproces door de voorwaarden voor iteratie bloot te stellen.
In deze oefening gebruikt u de for instructie en leert u hoe u de voorwaarde van de iteratie, de voltooiingsvoorwaarde, het iteratiepatroon en meer kunt beheren. Daarnaast leert u meer over veelvoorkomende gebruiksgevallen voor de for verklaring.
We gaan nu onze codeomgeving voorbereiden en beginnen met het onderzoeken van codevoorbeelden die een for instructie implementeren.
Uw coderingsomgeving voorbereiden
Deze module bevat praktische activiteiten die u begeleiden bij het bouwen en uitvoeren van demonstratiecode. We raden u aan om deze activiteiten uit te voeren met behulp van Visual Studio Code als uw ontwikkelomgeving. Het gebruik van Visual Studio Code voor deze activiteiten helpt u om comfortabeler code te schrijven en uit te voeren in een ontwikkelomgeving die wordt gebruikt door professionals wereldwijd.
Open Visual Studio Code.
U kunt de Windows-Startmenu (of een equivalente resource voor een ander besturingssysteem) gebruiken om Visual Studio Code te openen.
Selecteer Map openen in het menu Visual Studio Code-bestand.
Navigeer in het dialoogvenster Open Folder naar de Windows-bureaublad-map.
Als u een andere maplocatie hebt waar u codeprojecten bewaart, kunt u die maplocatie gebruiken. Voor deze training is het belangrijk om een locatie te hebben die gemakkelijk te vinden en te onthouden is.
Selecteer in het dialoogvenster Map openen de optie Map selecteren.
Als u een beveiligingsdialoogvenster ziet waarin u wordt gevraagd of u de auteurs vertrouwt, selecteert u Ja.
Selecteer In het menu Visual Studio Code Terminal de optie Nieuwe terminal.
U ziet dat in een opdrachtprompt in het terminalvenster het mappad voor de huidige map wordt weergegeven. Voorbeeld:
C:\Users\someuser\Desktop>Opmerking
Als u op uw eigen pc werkt in plaats van in een sandbox of gehoste omgeving en u andere Microsoft Learn-modules in deze C#-serie hebt voltooid, hebt u mogelijk al een projectmap gemaakt voor codevoorbeelden. Als dat het geval is, kunt u de volgende stap overslaan, die wordt gebruikt om een console-app te maken in de map TestProject.
Voer bij de terminalopdrachtprompt de volgende prompt in om een nieuwe consoletoepassing in een opgegeven map te maken:
dotnet new console -o ./CsharpProjects/TestProjectDeze .NET CLI-opdracht maakt gebruik van een .NET-programmasjabloon om een nieuw C#-consoletoepassingsproject te maken op de opgegeven maplocatie. Met de opdracht worden de mappen CsharpProjects en TestProject voor u gemaakt en wordt TestProject gebruikt als de naam van uw
.csprojbestand.Als er een bericht wordt weergegeven waarin wordt aangegeven dat de bestanden al bestaan, gaat u verder met de volgende stappen. U gebruikt de bestaande projectbestanden opnieuw.
Vouw in de EXPLORER-weergave de map CsharpProjects uit .
U ziet de map TestProject en twee bestanden, een C#-programmabestand met de naam Program.cs en een C#-projectbestand met de naam TestProject.csproj.
Selecteer Map openen in het menu Visual Studio Code-bestand.
Selecteer in het dialoogvenster Map openen de map CsharpProjects en klik vervolgens op Map selecteren.
Vouw in de explorer-weergave de map TestProject uit en selecteer Program.cs.
Verwijder de bestaande coderegels.
U gebruikt dit C#-consoleproject om codevoorbeelden te maken, te bouwen en uit te voeren tijdens deze module.
Sluit het venster Terminal.
Een basis 'for' statement schrijven
Zorg ervoor dat Visual Studio Code is geopend en Program.cs weergegeven in het deelvenster Editor.
Opmerking
Program.cs moet leeg zijn. Als dat niet het geval is, selecteer en verwijder alle coderegels.
Typ de volgende code in de Visual Studio Code Editor.
for (int i = 0; i < 10; i++) { Console.WriteLine(i); }Deze code presenteert een eenvoudig
forstatement dat 10 keer door zijn codeblok loopt, waarbij de huidige waarde vaniwordt afgedrukt.Selecteer Opslaan in het menu Visual Studio Code File.
Het Program.cs-bestand moet worden opgeslagen voordat u de code bouwt of uitvoert.
Klik in het deelvenster EXPLORER om een Terminal te openen op de locatie van de map TestProject met de rechtermuisknop op TestProject en selecteer Vervolgens Openen in geïntegreerde terminal.
Er wordt een Terminal paneel geopend. De Terminal moet een opdrachtprompt bevatten waarin wordt aangegeven dat de terminal is geopend voor de locatie van de map TestProject.
Typ dotnet-run bij de Terminal-opdrachtprompt en druk op Enter om uw code uit te voeren.
Opmerking
Als er een bericht wordt weergegeven met de tekst 'Kan een project niet vinden om uit te voeren', controleert u of in de Terminal-opdrachtprompt de verwachte locatie van de testprojectmap wordt weergegeven. Bijvoorbeeld:
C:\Users\someuser\Desktop\csharpprojects\TestProject>De volgende uitvoer wordt weergegeven.
0 1 2 3 4 5 6 7 8 9Neem even de tijd om de zes onderdelen van de
forinstructie te identificeren.De
forinstructie bevat de volgende zes onderdelen:- Het trefwoord
for. - Een set haakjes die de voorwaarden van
foriteratie definieert. De haakjes bevatten drie afzonderlijke delen, gescheiden door het einde van de instructieoperator, een puntkomma. - Het eerste deel definieert en initialiseert de iteratorvariabele. In dit voorbeeld:
int i = 0. Deze sectie wordt de initialisatiefunctie genoemd. - In het tweede deel wordt de voltooiingsvoorwaarde gedefinieerd. In dit voorbeeld:
i < 10. Met andere woorden, de runtime blijft de code in het codeblok herhalen onder deforinstructie zolangikleiner is dan10. Wanneerigelijk is aan10, stopt de runtime met het uitvoeren van het codeblok van defor-instructie. De documenten verwijzen naar deze sectie als de voorwaarde. - Het derde deel definieert de actie die moet worden uitgevoerd na elke iteratie. In dit geval verhoogt
i++na elke iteratie de waarde vanimet 1. De documenten verwijzen naar deze sectie als iterator. - Ten slotte, het codeblok. Het codeblok bevat de code die voor elke iteratie wordt uitgevoerd. U ziet dat er in het codeblok naar de waarde
iwordt verwezen. De documenten verwijzen naar deze sectie als hoofdtekst.
Gezien onze regels voor het benoemen van variabelen, vraagt u zich misschien af of
ihet een geldige naam is voor de variabele die de huidige iteratie bevat. In dit geval wordtidoor de meesten als geldig beschouwd. Andere populaire keuzes zijnxencounter. De naamjwordt ook gebruikt in die situaties wanneer u een buitensteforinstructie hebt die gebruikmaaktien een iteratievariabele moet maken voor een interneforinstructie.Opmerking
Alle drie de secties (initialisatie, voorwaarde en iterator) zijn optioneel. In de praktijk worden doorgaans alle drie de secties gebruikt.
- Het trefwoord
De iteratievoorwaarden wijzigen
Zoals we aan het begin hebben gezegd, heeft de for instructie twee unieke kwaliteiten tussen iteratie-instructies.
- De
forinstructie moet worden gebruikt wanneer u het aantal keren weet dat u van tevoren een codeblok moet doorlopen. - Met
forde instructie kunt u bepalen hoe elke iteratie wordt verwerkt.
Wat als we een codeblok moeten herhalen, maar willen aftellen in plaats van optellen?
Gebruik de Visual Studio Code-editor om uw code als volgt bij te werken:
for (int i = 10; i >= 0; i--) { Console.WriteLine(i); }Neem even de tijd om de bijgewerkte code te controleren.
Door de drie onderdelen van de
forinstructie te wijzigen, wijzigen we het gedrag ervan.- We initialiseren de iteratievariabele naar 10.
- We wijzigen de voorwaarde voor voltooiing om de
forinstructie te beëindigen wanneerikleiner is dan0. - We wijzigen het patroon van de iterator om af te trekken
1vanielke keer dat we een iteratie voltooien.
Sla uw codebestand op en gebruik Visual Studio Code om uw code uit te voeren.
Voer
dotnet runvanaf de Terminal-opdrachtprompt in om uw code uit te voeren.U ziet dat de uitvoer is gewijzigd.
Wanneer u de code uitvoert, ziet u de volgende uitvoer.
10 9 8 7 6 5 4 3 2 1 0
Experimenteer met het patroon van de iterator
Wat als we bepaalde waarden in de iteratorvariabele willen overslaan?
Gebruik de Visual Studio Code-editor om uw code als volgt bij te werken:
for (int i = 0; i < 10; i += 3) { Console.WriteLine(i); }Neem even de tijd om de bijgewerkte code te controleren.
In plaats van de waarde van de iteratorvariabele
1te verhogen of te verlagen, gebruikeni += 3we om twee waarden na elke iteratie over te slaan.Sla uw codebestand op en gebruik Visual Studio Code om uw code uit te voeren.
Voer
dotnet runvanaf de Terminal-opdrachtprompt in om uw code uit te voeren.Let op hoe de uitvoer is gewijzigd.
Wanneer u de code uitvoert, ziet u de volgende uitvoer.
0 3 6 9Natuurlijk zult u dit soort dingen niet vaak doen, maar hopelijk kunt u waarderen dat u een fijnkorrelig niveau van controle over de iteraties hebt als u het ooit nodig hebt.
Gebruik het trefwoord break om een lus te beëindigen.
Wat gebeurt er als we de iteratie-instructie voortijdig moeten afsluiten op basis van een bepaalde voorwaarde? We kunnen het break trefwoord gebruiken.
Gebruik de Visual Studio Code-editor om uw code als volgt bij te werken:
for (int i = 0; i < 10; i++) { Console.WriteLine(i); if (i == 7) break; }Neem even de tijd om het gebruik van het
breaktrefwoord in uw bijgewerkte code te bekijken.We zagen voor het eerst het
breaktrefwoord in de module 'Codestroom vertakken met de switch-case-structuur in C#'. Zoals blijkt, kunnen we hetbreaktrefwoord ook gebruiken om iteratie-instructies af te sluiten.Sla uw codebestand op en gebruik Visual Studio Code om uw code uit te voeren.
Voer
dotnet runvanaf de Terminal-opdrachtprompt in om uw code uit te voeren.Let op hoe de uitvoer is gewijzigd.
Wanneer u de code uitvoert, ziet u de volgende uitvoer.
0 1 2 3 4 5 6 7
Elk element van een matrix doorlopen
Een veelvoorkomend gebruik van de for instructie is het herhalen van een matrix met elementen, met name als u enige controle nodig hebt over de manier waarop de iteratie plaatsvindt. Terwijl de instructies foreach door elk element van de matrix worden herhaald, kan de for instructie worden aangepast om meer aanpassingen te bieden.
Gebruik de Visual Studio Code-editor om uw code als volgt bij te werken:
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = names.Length - 1; i >= 0; i--) { Console.WriteLine(names[i]); }Neem even de tijd om de bijgewerkte code te controleren.
Ten eerste, merk op dat we een array van strings hebben geïnstantieerd genaamd
names, dat vier namen bevat.U ziet nu dat we de
Array.Lengtheigenschap gebruiken om het aantal elementen in de matrix op te halen en dat we deze waarde gebruiken om de iteratorvariabele (int i = names.Length - 1) te initialiseren. We trekken 1 af van de waarde omdat het indexnummer voor matrixelementen op nul is gebaseerd (de indexnummers van de vier elementen zijn 0-3).Ten slotte ziet u dat we ervoor hebben gekozen om de matrix achterwaarts te doorlopen, iets wat we niet met de
foreachinstructie kunnen doen. We gebruiken de waarde van de iteratievariabele in het codeblok om het indexnummer van de matrixelementen (names[i]) op te geven.Sla uw codebestand op en gebruik Visual Studio Code om uw code uit te voeren.
Voer
dotnet runvanaf de Terminal-opdrachtprompt in om uw code uit te voeren.U ziet dat de matrixelementen in omgekeerde volgorde worden weergegeven (zoals we hebben bedoeld).
Wanneer u de code uitvoert, ziet u de volgende uitvoer.
Michael David Eddie AlexOpmerking
We hadden door de array-elementen kunnen itereren door de
forinstructie als volgt te construeren:for (int i = 0; i < names.Length; i++).
De beperking van de foreach-instructie onderzoeken
Wat moet u doen als u tijdens een foreach iteratie een waarde in de matrix wilt bijwerken?
Gebruik de Visual Studio Code-editor om uw code als volgt bij te werken:
string[] names = { "Alex", "Eddie", "David", "Michael" }; foreach (var name in names) { // Can't do this: if (name == "David") name = "Sammy"; }Sla uw codebestand op en gebruik Visual Studio Code om uw code uit te voeren.
Voer
dotnet runvanaf de Terminal-opdrachtprompt in om uw code uit te voeren.Let op het foutbericht dat wordt weergegeven.
Als u deze code probeert te compileren en uit te voeren, ziet u een uitzondering.
Cannot assign to name because it is a 'foreach iteration variable'Met andere woorden, u kunt de waarde
nameniet opnieuw toewijzen omdat deze deel uitmaakt van de interne implementatie van deforeachiteratie.
De beperking van de foreach-instructie overhalen met behulp van de for-instructie
Laten we een for instructie gebruiken om de inhoud van een matrix in het iteratiecodeblok te wijzigen.
Gebruik de Visual Studio Code-editor om uw code als volgt bij te werken:
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = 0; i < names.Length; i++) if (names[i] == "David") names[i] = "Sammy"; foreach (var name in names) Console.WriteLine(name);Neem even de tijd om de bijgewerkte code te controleren.
Let op dat we de accolades uit de codeblokken hebben verwijderd die maar één regel code bevatten. Deze revisie maakt gebruik van dezelfde techniek die we hebben besproken in de module 'Bereik en logica van variabelen beheren met behulp van codeblokken in C#'. Veel ontwikkelaars vinden deze stijl moeilijk te lezen, terwijl anderen de voorkeur geven aan deze verkorte stijl, omdat ze hiermee beknopter en expressiever kunnen schrijven. Als u deze code moeilijk kunt lezen, of als u gewoon deze stijl niet prettig vindt, wees gerust dat de accolades altijd kunnen worden gebruikt in uw codeblokken. Werk desgewenst de code in het deelvenster Editor bij met de volgende code:
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = 0; i < names.Length; i++) { if (names[i] == "David") { names[i] = "Sammy"; } } foreach (var name in names) { Console.WriteLine(name); }Sla uw codebestand op en gebruik Visual Studio Code om uw code uit te voeren.
Voer
dotnet runvanaf de Terminal-opdrachtprompt in om uw code uit te voeren.U ziet dat de code zonder fouten wordt uitgevoerd en de gewenste uitvoer genereert.
Wanneer u de code uitvoert, ziet u de volgende uitvoer.
Alex Eddie Sammy MichaelOmdat de matrix niet rechtstreeks deel uitmaakt van de implementatie van de iteratie-instructie, kunt u waarden in de matrix wijzigen.
Samenvatting
Hier volgen enkele van de punten uit deze les:
- Met de
forherhalingsinstructie kunt u een bepaald aantal keren code herhalen. - Met
forde iteratie-instructie kunt u elk aspect van de iteratiemechanismen beheren door de drie voorwaarden tussen de haakjes te wijzigen: de initialisatiefunctie, voorwaarde en iterator. - Het is gebruikelijk om de
forinstructie te gebruiken wanneer u wilt bepalen hoe u elk item in een matrix wilt herhalen. - Als uw codeblok slechts één regel code heeft, kunt u desgewenst de accolades en witruimte elimineren.