loop-o-rama 1: Nybegynner
- Thursday, September 8th, 2011
- Skriv en kommentar
Fø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.
Kategorier: Polyglot.
RSS feed for kommentarene.
Tilbaketråkk.



September 8th, 2011 at 12:39 pm
for-løkken fra ruby, er vel egenlig en foreach, eller?
September 8th, 2011 at 4:05 pm
Joa, du har forsåvidt rett i det, kommer litt an på hvordan man ser det. Men en for-loop over en range er en grei måte å introdusere FOR på tenkte jeg. Og den er vel den eneste formen for FOR som støttes i Ruby – av og til greit å huske på at C-standarden ikke er eneste måten å gjøre det på.
September 8th, 2011 at 11:49 pm
Hei. Kanskje dumt at min første kommentar til bloggen din er denne. Jeg følger bloggen din med stor interesse, og synes det er flott med en norsk utviklerblogg av høy kvalitet. Du har sikkert en oppfølgingsplan på “loop-o-rama 1″, men jeg lurer litt på hvor du egentlig vil. Det er jo ganske basic stuff, dette?
September 9th, 2011 at 12:28 pm
Basic ja, det er sånn Dette Lærer Du Første Dagen stuff! Jeg blogger mye etter innfallsmetoden, og denne gang har jeg tenkt å ta dere med på en liten reise. Vi får se hvor det ender. Helt greit om du ser bort fra hele serien, men det kan hende det er noe å lære etterhvert.
Uansett Takk for tilbakemeldingen!
September 20th, 2011 at 8:06 pm
[...] Gikk du glipp av begynnelsen? Del 1 finner du her. [...]