“Loop statements” zijn niets anders dan het automatiseren van meerstappen-processen door het organiseren van reeksen acties, en het groeperen van de delen die herhaald moeten worden. Iteratie (of Looping), ook een centraal onderdeel van programmeren, geeft computers veel van hun kracht. Zij kunnen een opeenvolging van stappen zo vaak herhalen als nodig is, en passende herhalingen van eenvoudige stappen kunnen complexe problemen oplossen.
In het algemeen zijn er twee soorten “Looping-technieken”:
“For Loops”: zijn die welke een voorgeschreven aantal keren worden uitgevoerd, zoals gecontroleerd door een teller of een index.
“While Loops” en “Repeat Loops”: zijn gebaseerd op het begin en de verificatie van een logische voorwaarde. De voorwaarde wordt getest aan het begin of aan het eind van de lusconstructie.
Laten we ze eens bekijken:
1) For Loops
In deze besturingsstructuur worden statements achter elkaar uitgevoerd in een opeenvolgende volgorde over een reeks waarden die alleen wordt geëvalueerd wanneer de “For Loop” wordt gestart (nooit opnieuw geëvalueerd). In dit geval is het aantal iteraties vast en van tevoren bekend.
Als de evaluatie van de voorwaarde op een variabele (die waarden binnen een gespecificeerde reeks kan aannemen) WAAR oplevert, worden een of meer verklaringen achtereenvolgens uitgevoerd over die reeks van waarden. Zodra de eerste voorwaardetest is uitgevoerd (en TRUE oplevert), wordt het statement uitgevoerd en wordt de voorwaarde opnieuw geëvalueerd, waarbij een iteratief proces wordt doorlopen. Het onderdeel “variabele in reeks” voert deze test uit op elke waarde van de reeks tot het laatste element is bereikt.
Als niet aan de voorwaarde wordt voldaan en het resultaat FALSE is (d.w.z. als het onderdeel “variabele in reeks” alle elementen van de reeks heeft doorgenomen), eindigt de lus. Als de voorwaardetest in de eerste iteratie FALSE oplevert, wordt de “For Loop” nooit uitgevoerd.
De syntaxis van “For Loops” is:
Voorbeeld 1
Om te laten zien hoe “For Loops” werken, maken we eerst een reeks door verschillende namen van vruchten aan elkaar te plakken om een lijst te maken (genaamd “fruit_list”):
We gebruiken deze fruitlijst als “sequentie” in een “For Loop”, en laten de “For Loop” één keer een instructie uitvoeren (de naam van elke waarde afdrukken) voor elke waarde in de sequentie (de verschillende vruchten in de fruitlijst):
De “breekvoorwaarde” treedt in werking wanneer de variabele (x) 10 bereikt, en de lus eindigt.
Uitvoer
5 6 7 8 9
Voorbeeld 2
Nemen we nu aan dat we een lijst willekeurige getallen produceren, waarvan we de volgorde of volgorde van genereren niet kennen.
In dit voorbeeld zullen we een “Repeat Loop” gebruiken om een reeks normaal verdeelde willekeurige getallen te genereren (je kunt willekeurige getallen genereren met elke andere verdeling, we kiezen gewoon deze), en de reeks breken zodra een van die getallen groter is dan 1. Omdat we niet weten welke getallen eerst komen, weten we ook niet hoe lang de reeks zal zijn: we weten alleen de breekvoorwaarde.
Eerst gebruiken we de “set.seed” instructie om de willekeurige getallen vast te zetten (altijd dezelfde willekeurige getallen genereren), en dit voorbeeld reproduceerbaar te maken.
Dan starten we de “Repeat Loop” door een normaal verdeeld willekeurig getal te genereren, dat af te drukken, en te controleren of dat getal groter is dan 1. Pas als deze voorwaarde WAAR wordt (kan met het eerste gegenereerde getal zijn, of niet), gaat de luscyclus over naar het break statement en eindigt.
Hieruit blijkt eens te meer hoe belangrijk het is om een goede breekvoorwaarde in te stellen. Als je dat niet doet, krijg je een oneindige lus.
Eindgedachten
We hebben concepten afzonderlijk gezien en uitgelegd, maar “Control Structures” kun je combineren zoals je wilt: Lussen kunnen meerdere interne Lussen bevatten; Conditionals kunnen Lussen en Conditionals bevatten, de mogelijkheden zijn eindeloos. (In feite, bij het bekijken van “Repeat Loops” ontdekten we dat de voorbeelden geneste “If statements” bevatten).
Je kunt geavanceerde oplossingen ontwikkelen door gewoon de “Control Structures” te combineren die we in dit artikel hebben uitgelegd. Zoals Minsky stelde, kunnen we complexe uitkomsten bereiken als resultaat van de interactie van eenvoudiger componenten. Control Structures vormen de basisblokken voor besluitvormingsprocessen in de informatica. Ze veranderen de stroom van programma’s en stellen ons in staat om complexe reeksen instructies te construeren uit eenvoudigere bouwstenen.
Mijn advies is: leer erover.
Het zal je weg vergemakkelijken bij het coderen en begrijpen van programma’s, en het zal je helpen nieuwe manieren te vinden om problemen op te lossen.