loop-o-rama 1: Nybegynner


torsdag 8. september 2011 Polyglot

Thomas & Friends Loop The Loop ThomasFørst lærer vi variabler. Så lærer vi å velge mellom to ting med if-else, og det tredje en fersk utvikler lærer er å gjøre ting mange ganger. Denne blogposten er den første i en serie dedikert til løkken!

To grunntyper

I den kategorien med høynivå språk som vi kaller de imperative finner vi hovedsakelig to typer løkker (og en rekke varianter av disse). Vi kaller dem while-løkker og for-løkker. While brukes når man skal gjøre noe inntil noe bestemt inntreffer, men ikke vet på forhånd hvor lenge/mange ganger det vil si at løkken må kjøre. For bruker vi derimot når vi vet hvor mange ganger vi skal gjøre noe.

While

En while-løkke ser typisk slik ut:

while(some_boolean_condition) {
    do_something;
}

Løkken vil utføre do_something sålenge some_boolean_condition er true. I noen språk finnes det også varianter med motsatt funksjon, som utfører innholdet i løkken helt til testet blir true. I f.eks. Ruby heter denne until. Det finnes også do-while og do-until løkker som alltid utfører innholdet i løkken minst én gang før testen kjøres.

For

I motsetning til while-løkken er for-løkken knyttet til en variabel. Den enkleste variantent er løkker over en sekvens. Her er et eksempel fra Ruby:

for i in 1..5
    puts i
end

Variabelen i knyttes i tur og orden til tallene i sekvensen, og denne løkken skriver dermed ut tallene 1, 2, 3, 4 og 5.

Den vanligste formen for-løkker er likevel den vi finner i programmeringsspråket C (og alle språk som har arvet syntaks derfra, f.eks. C++, Java, C# eller PHP). Den ser (i forklarende pseudokode) slik ut:

for(initializer ; test ; step) {
    doSomething;
}

Initialiser utføres aller først. Test kjøres i forkant av hver iterasjon for å undersøke om vi skal fortsette – tilsvarer altså testen i while-løkken. Og step utføres en gang etter hver iterasjon. For å skrive ut tallene 1 til 5 i C# kan vi bruke denne for-løkken:

for(int i = 1; i <= 5; i++)
{
    Console.WriteLine(i);
}

Man kan i mange språk la være å spesifisere en eller flere av delene i for-løkken. En uendelig løkke som ikke vil ha noen annen effekt enn å gjøre CPU'en din varm vil se slik ut:

for(;;){}

foreach

Mange språk støtter også en type løkke som itererer over et array, en liste eller en annen type kolleksjon. Et typisk navn på denne er foreach, og minner om den første for-løkken jeg viste som itererte over en sekvens. Et eksempel i C#:

var list = new[] {-1, 2, 3, 50, 99, 101};
foreach (var item in list)
{
    Console.WriteLine(item);
}

Fordelen med denne typen løkker i forhold til den vanlige C-baserte for-løkken er at man unngår muligheten for å glemme siste element, eller kjøre løkken ett element for lagt – dette er nemlig en ganske vanlig feil ved bruk av for-løkker, og ikke bare blant nybegynnere.


comments powered by Disqus