Loopen är ett vanligt inslag i alla programmeringsspråk. Delphi har tre kontrollstrukturer som kör kodblock upprepade gånger: för, upprepa ... tills och medan ... gör.
Anta att vi måste upprepa en åtgärd ett fast antal gånger.
// visa 1,2,3,4,5 meddelandelådor
var j: heltal;
Börja
för j: = 1 till 5 do
Börja
ShowMessage ('Box:' + IntToStr (j));
slutet;
slutet;
Värdet på en kontrollvariabel (j), som egentligen bara är en räknare, avgör hur många gånger ett för uttalande körs. Nyckelordet för skapar en räknare. I föregående exempel är startvärdet för räknaren inställt på 1. Slutvärdet är satt till 5.
När for-satset börjar körs är räknarvariabeln inställd på startvärdet. Delphi än kontrollerar om räknarens värde är mindre än slutvärdet. Om värdet är större görs ingenting (programutförande hoppar till kodraden omedelbart efter blockets for loop-kod). Om startvärdet är mindre än slutvärdet, körs slingans kropp (här: meddelanderutan visas). Slutligen lägger Delphi till 1 i räknaren och startar processen igen.
Ibland är det nödvändigt att räkna bakåt. De ner till nyckelord anger att värdet på en räknare ska minskas med en varje gång slingan körs (det är inte möjligt att ange en ökning / minskning annan än en). Ett exempel på en for-loop som räknar bakåt.
var j: heltal;
Börja
för j: = 5 ner till 1 do
Börja
ShowMessage ('T minus' + IntToStr (j) + 'sekunder');
slutet;
ShowMessage ('För sekvens exekverad!');
slutet;
Obs! Det är viktigt att du aldrig ändrar värdet på styrvariabeln mitt i slingan. Om du gör det kommer det att orsaka fel.
Att skriva en för loop i en annan för loop (häckslingor) är mycket användbart när du vill fylla / visa data i en tabell eller ett rutnät.
var k, j: heltal;
Börja
// denna dubbla slinga utförs 4x4 = 16 gånger
för k: = 1 till 4 do
för j: = 4 ner till 1 do
ShowMessage ('Box:' + IntToStr (k) + ',' + IntToStr (j));
slutet;
Regeln för att häcka nästa slingor är enkel: den inre slingan (j-räknaren) måste vara klar innan nästa påstående för den yttre slingan stöter på (k-räknare). Vi kan ha tripplade eller fyrföljda kapslade öglor, eller ännu mer.
Obs! I allmänhet krävs det inte strikt nyckelord för start och slut, som du kan se. Om inte början och slut inte används, anses uttalandet omedelbart efter uttalandet vara öglets kropp.
Om du har Delphi 2005 eller någon nyare version kan du använda den "nya" iterationen för element-i-samling-stil över containrar. Följande exempel visar iteration över stränguttryck: för varje char i sträng kontrollera om tecknet antingen är 'a' eller 'e' eller 'i'.
const
s = 'Om Delphi-programmering';
var
c: char;
Börja
för c i s do
Börja
om c i ['a e i'] sedan
Börja
// göra någonting
slutet;
slutet;
slutet;
Ibland vet vi inte exakt hur många gånger en slinga ska cykla. Tänk om vi vill upprepa en operation tills vi når ett specifikt mål?
Den viktigaste skillnaden mellan loop-tiden och repet-till-loop är att koden för repetitionssatsen alltid körs minst en gång.
Det allmänna mönstret när vi skriver en repetitions (och medan) typ av slinga i Delphi är som följer:
upprepa
Börja
uttalanden;
slutet;
fram tills villkor = sant
medan villkor = sant do
Börja
uttalanden;
slutet;
Här är koden för att visa 5 på varandra följande meddelandelådor med upprepning tills:
var
j: heltal;
Börja
j: = 0;
upprepa
Börja
j: = j + 1;
ShowMessage ('Box:' + IntToStr (j));
slutet;
fram tills j> 5;
slutet;
Som ni ser utvärderar upprepningsförklaringen ett villkor i slutet av slingan (därför repeteras repetitionssäkerheten minst en gång).
Samtidigt uttalandet utvärderar å andra sidan ett villkor i början av slingan. Eftersom testet utförs högst upp måste vi vanligtvis se till att villkoret är vettigt innan slingan behandlas, om detta inte är sant kan kompilatorn besluta att ta bort slingan från koden.
var j: heltal;
Börja
j: = 0;
medan j < 5 do
Börja
j: = j + 1;
ShowMessage ('Box:' + IntToStr (j));
slutet;
slutet;
Break and Continue-procedurerna kan användas för att kontrollera flödet av upprepade uttalanden: Break-proceduren gör att kontrollflödet lämnar ett för, medan eller upprepar uttalande och fortsätter vid nästa uttalande efter loop-uttalandet. Fortsätt gör att kontrollflödet går vidare till nästa iteration av upprepande operation.