loop-o-rama 1: Nybegynner

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.

Kategorier: Polyglot.
RSS feed for kommentarene. Tilbaketråkk.

5 kommentarer til “loop-o-rama 1: Nybegynner”

  1. Kråkelefse Says:

    for-løkken fra ruby, er vel egenlig en foreach, eller?

  2. Torbjørn Says:

    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å.

  3. LP Says:

    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?

  4. Torbjørn Says:

    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!

  5. Loop-o-rama 2: Avansert nybegynner Says:

    [...] Gikk du glipp av begynnelsen? Del 1 finner du her. [...]

Skriv en kommentar

Tillatte tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


Alf Kåre Lefdal: Distributed Podcast er også ganske interessant. De tar opp tema som fx. ...

Stian: +1 for 6er til This Developer's Life! Min definitive favoritt. Jeg trengte også...

Torbjørn: Takk for flere tips, Vegard. Deep Fried Bytes ligger på oversikten min fra 2009...

Vegar: Og glemte helt ios: Nsbrief og ideveloper live. Har du hørt på deep fried byt...

Vegar: Mye kjekt her. TDL, hanselminutes og .net rocks ligger i en klasse for seg. Suv...

Torbjørn: Helt enig, arkivet til Software Engineering Radio er en gullgruve om man vet hva...

Einar W. Høst: Jeg synes at det kuleste med se-radio er backloggen av intervjuer... det er noen...

arnab: fantastisk :)...

Olav: Glimrende blogg ! Modellen av hjernens arbeid passer ikke bare på nyskaping: ...

Torbjørn: Ja, flydesign trekkes ofte frem som et eksempel på dette fenomenet. Design av b...

Mulig relaterte linker

 Hold deg oppdatert

Søk i bloggen

Ferske innlegg

  • NodeJS vs. ASP.NET
  • Pulten min..
  • No ifs and buts
  • Community-fiskebolle på ROOTS 2012
  • Kategorier

  • .net ninja (37)
  • Bøker (18)
  • Diverse prosjekter (37)
  • DSL (10)
  • Erlang (10)
  • F# (5)
  • Hardware (1)
  • Jobb (78)
  • Julekalender (51)
  • kjempekjekt.com (23)
  • LISP/Clojure (34)
  • NDC (4)
  • NNUG / community (63)
  • O/RM & databaser (10)
  • Off topic (118)
  • OO-design/clean code (31)
  • Podcasts (15)
  • Polyglot (82)
  • Ruby (29)
  • Silverlight / RIA (3)
  • Software/verktøy (20)
  • Softwareutvikling (24)
  • Testing / TDD (30)
  • the contiki strip (13)
  • User experience (3)
  • WCF (3)
  • Webutvikling (34)
  • WPF (9)
  • WTF (13)
  • Last ned Wallpaper

    Programmeringsbloggens tøffe skrivebordsbakgrunn med snippets fra ulike språk laster du ned her!

    Abonner via epost

    Om du vil kan du få alle nye blogposter tilsendt til din epost. Abonner nå, det er kjempeenkelt!

    Meta