De lus is een gemeenschappelijk element in alle programmeertalen. Delphi heeft drie besturingsstructuren die codeblokken herhaaldelijk uitvoeren: voor, herhalen ... tot en terwijl ... doen.
Stel dat we een bewerking een vast aantal keren moeten herhalen.
// toon 1,2,3,4,5 berichtvakken
var j: geheel getal;
beginnen
voor j: = 1 naar 5 Doen
beginnen
ShowMessage ('Box:' + IntToStr (j));
einde;
einde;
De waarde van een besturingsvariabele (j), die eigenlijk slechts een teller is, bepaalt hoe vaak een for-instructie wordt uitgevoerd. Het trefwoord voor stelt een teller in. In het voorgaande voorbeeld is de startwaarde voor de teller ingesteld op 1. De eindwaarde is ingesteld op 5.
Wanneer de instructie for begint te lopen, wordt de tellervariabele ingesteld op de startwaarde. Delphi controleert dan of de waarde voor de teller kleiner is dan de eindwaarde. Als de waarde groter is, wordt er niets gedaan (de uitvoering van het programma springt naar de coderegel direct na het for-luscodeblok). Als de startwaarde kleiner is dan de eindwaarde, wordt de body van de lus uitgevoerd (hier: het berichtvenster wordt weergegeven). Ten slotte voegt Delphi 1 aan de teller toe en start het proces opnieuw.
Soms is het nodig om achteruit te tellen. De downto sleutelwoord geeft aan dat de waarde van een teller elke keer dat de lus wordt uitgevoerd, met één moet worden verlaagd (het is niet mogelijk om een andere verhoging / verlaging op te geven). Een voorbeeld van een for-lus die achteruit telt.
var j: geheel getal;
beginnen
voor j: = 5 downto 1 Doen
beginnen
ShowMessage ('T minus' + IntToStr (j) + 'seconds');
einde;
ShowMessage ('Voor uitvoering uitgevoerd!');
einde;
Opmerking: het is belangrijk dat u nooit de waarde van de besturingsvariabele in het midden van de lus wijzigt. Dit veroorzaakt fouten.
Het schrijven van een for-lus in een andere for-lus (nestlussen) is erg handig als u gegevens in een tabel of een raster wilt vullen / weergeven.
var k, j: geheel getal;
beginnen
// deze dubbele lus wordt 4x4 = 16 keer uitgevoerd
voor k: = 1 naar 4 Doen
voor j: = 4 downto 1 Doen
ShowMessage ('Box:' + IntToStr (k) + ',' + IntToStr (j));
einde;
De regel voor het nesten van volgende lussen is eenvoudig: de binnenste lus (j-teller) moet worden voltooid voordat de volgende instructie voor de buitenste lus wordt aangetroffen (k-teller). We kunnen drievoudige of viervoudige geneste lussen hebben, of zelfs meer.
Opmerking: Over het algemeen zijn de begin- en eindzoekwoorden niet strikt vereist, zoals u kunt zien. Als begin en einde niet worden gebruikt, wordt de instructie die direct volgt op de for-instructie beschouwd als het lichaam van de lus.
Als u Delphi 2005 of een nieuwere versie hebt, kunt u de "nieuwe" for-element-in-collection stijl iteratie over containers gebruiken. In het volgende voorbeeld wordt de iteratie van tekenreeksexpressies getoond: controleer voor elk teken in tekenreeks of het teken 'a' of 'e' of 'i' is.
const
s = 'Over Delphi Programming';
var
c: char;
beginnen
voor c in s Doen
beginnen
als c in [ 'A', 'e', 'i'] vervolgens
beginnen
// doe iets
einde;
einde;
einde;
Soms weten we niet precies hoe vaak een lus moet fietsen. Wat als we een operatie willen herhalen totdat we een specifiek doel bereiken?
Het belangrijkste verschil tussen de while-do-lus en de herhaal-totdat-lus is dat de code van de herhaalopdracht altijd minimaal één keer wordt uitgevoerd.
Het algemene patroon wanneer we een herhalingstype (en terwijl) in Delphi schrijven, is als volgt:
herhaling
beginnen
statements;
einde;
tot staat = waar
terwijl staat = waar Doen
beginnen
statements;
einde;
Hier is de code om 5 opeenvolgende berichtenvakken weer te geven met herhaal-tot:
var
j: geheel getal;
beginnen
j: = 0;
herhaling
beginnen
j: = j + 1;
ShowMessage ('Box:' + IntToStr (j));
einde;
tot j> 5;
einde;
Zoals u ziet, evalueert de herhaalopdracht een voorwaarde aan het einde van de lus (daarom wordt de herhaallus zeker minstens één keer uitgevoerd).
De while-instructie daarentegen evalueert een voorwaarde aan het begin van de lus. Aangezien de test bovenaan wordt uitgevoerd, moeten we er meestal voor zorgen dat de voorwaarde logisch is voordat de lus wordt verwerkt. Als dit niet waar is, kan de compiler besluiten de lus uit de code te verwijderen.
var j: geheel getal;
beginnen
j: = 0;
terwijl j < 5 Doen
beginnen
j: = j + 1;
ShowMessage ('Box:' + IntToStr (j));
einde;
einde;
De procedures Break en Continue kunnen worden gebruikt om de stroom van repetitieve instructies te besturen: De Break-procedure zorgt ervoor dat de controlestroom een instructie for, while of repeat verlaat en doorgaat naar de volgende instructie na de lusinstructie. Doorgaan laat de besturingsstroom doorgaan naar de volgende iteratie van de herhalende bewerking.