Toistorakenne

Toistorakenne eli silmukka on ohjelmointikielten rakenne, joka toistaa annettua ohjelmakoodia, kunnes annettu ehtolause ei enää evaluoidu todeksi. Toistorakenteen sisältämää lohkoa voidaan toistaa tietyn määrän kertoja, kerran jokaiselle kokoelman jäsenelle, kunnes jokin ehto on täytetty tai määräämättömäksi ajaksi. Silmukat ovat kätevä työkalu ohjelmoinnissa, sillä niillä voidaan toistaa automaattisesti tiettyä komentoa tarvittavan monta kertaa vaivatta Boolen algebran mukaisesti.
Useat ohjelmointikielet tukevat eri muotoja, mutta eivät välttämättä jokaista muotoa. Sivunkuvauskielet kuten HTML ja kyselykielet kuten SQL eivät yleensä tue toistorakenteita.
While-rakenne.
codice_1- rakenteessa ehtolause tarkistetaan jo ennen lohkon suorittamista ja tästä syystä tämä ohjausrakenne tunnetaan usein myös nimellä pre-test loop (karkeasti käännettynä: esitestisilmukka).
Java-kielessä, C-kielessä ja C++ -kielessä codice_1-silmukka kirjoitetaan seuraavasti:
while (toistoehto) {
 /* toistettava ohjelmakoodi */
Python-kielessä taas seuraavasti:
while (toistoehto):
 #toistettava ohjelmakoodi
Python-kielessä ei ole erillisiä silmukan alku- eikä loppumerkkejä. Siksi sisennys eli rivien alussa olevat välilyönnit ovat erityisen tärkeitä.
Ruby-kielessä on codice_3-rakenne, joka on käänteinen codice_1-rakenteelle: lausekkeen ollessa tosi ja tämän vastakohtana lausekkeen ollessa epätosi.
Do-while-silmukka.
codice_5-silmukka eroaa codice_1 -silmukasta siinä, että toistoehdon tarkastus tehdään vasta silmukan rungon suorittamisen jälkeen, jolloin annettu runko tulee aina suoritetuksi vähintään kerran. Koska codice_5-silmukka tarkistaa toistoehdon vasta rungon suorittamisen jälkeen, tunnetaan tämä ohjausrakenne myös nimellä post-test loop (karkeasti käännettynä: testin jälkeinen silmukka).
do {
 /* toistettava koodi */
} while (toistoehto);
For-silmukka.
codice_8-silmukka on samankaltainen kuin codice_1, mutta sen arvot voidaan alustaa suoraan argumenteissa. codice_8-silmukka toimii suorittamalla koodin osan toistuvasti kunnes tietty ehto on täytetty. Esimerkiksi Python-kielessä codice_8-silmukkaan voidaan myös yhdistää codice_12 - komento jolloin muuttuja käy läpi haluttuja lukuja. Silmukan määrittelyssä annetaan kolmessa kohdassa alustustoimenpiteet, tarkistusehdot ja toiston jälkeen suoritettava toiminto, joita voi kielestä riippuen olla useita joka kohdassa. Tavanomainen määrittely näyttää samanlaiselta C, C++ ja Java kielissä:
for (int i = 0; i &lt; 10; i++) {
 //toistettava koodi
Ehtoja voidaan yhdistää eri kentissä seuraavasti:
int a, b;
for (a = 0, b = 9; a &lt; 10 &amp;&amp; b &gt;= 0; a++, --b)
 printf("a: %d, b: %d\n", a, b);
Foreach-silmukka.
codice_13-silmukka toistaa silmukan runkoa, kunnes jokainen annetun kokoelman tietue on käsitelty. Foreach-rakenne piilottaa viittauksen taulukon indeksiin tai vastaavaan käsittelyn kannalta epäoleelliseen tietoon. Kokoelman on oltava yhteensopiva foreach-rakenteen kanssa (esim. Javan Collection, Rubyn enumerable). codice_13-silmukkaa käytetään usein codice_8-silmukan sijaan aika samalla tavalla. Eroavaisuutena codice_13-silmukan ja muiden codice_8-rakenteiden välillä on se, että codice_13-silmukka ei yleensä sisällä mitään eksplisiittistä laskuria. Tämän silmukan toiminta on enemmän: "tee tämä kaikille tässä kokoelmassa", entä "tee tämä x monta kertaa".
Seuraava Java-kielinen esimerkkiohjelma laskee kokonaislukutaulukon alkioiden summan - Javassa avainsana on ei ole codice_13, vaan codice_8:
int sum(int[] a) {
 int result = 0;
 for (int i : a)
 result += i;
 return result;
Python:
lista = ["1. arvo", "2. arvo", "3. arvo"]
for x in lista:
 print (x);
C++ tukee codice_13-silmukkaa C++11:stä lähtien rajatun alueen codice_8-silmukkana ():
int main()
 int myint[] = {1, 2, 3, 4, 5};
 for (int i : myint)
 std::cout « i « '\n';
Toistorakenteet kääntäjissä.
Ohjelmointikielen kääntäjät voivat suorittaa erilaisia optimointeja, joissa suoritusaikaa pienennetään. Esimerkkeinä toistorakenteen "purkaminen" ().