Loop-o-rama 3: Old School


lørdag 10. september 2011 Polyglot

Min lille serie om løkker og iterering fortsetter, og i dag tar vi en nærmere titt på løkker basert på det utskjelte og fryktede taboo-ordet GOTO.

Loop med Goto

Føler man seg skikkelig vill og gal, eller befinner seg i et mindre sofistikert språk, eller i assembly, så kan man lage løkker ved hjelp av goto-instruksjonen (eller en variant av denne kommandoen). Når man kompilerer eller tolker for- og while-løkker i høyerenivåspråk blir de også redusert til goto-lignende-strukturer. Man kan se på goto som en grunnleggende instruksjon man kan bruke til å lage mere avanserte løkke-abstraksjoner.

Her en en goto-løkke i C# som skriver ut tallene 1 til og med 5 (ja, man har goto i C#, men den brukes ytterst sjelden):

    int i = 1;
    goto Test;
LoopStart:
    Console.WriteLine(i);
    i++;
Test:
    if (i <= 5)
        goto LoopStart;

Eventuelt kan den samme løkken skrives slik:

    int i = 1;
Test:
    if (i > 5)
        goto LoopEnd;
    Console.WriteLine(i);
    i++;
    goto Test;
LoopEnd: ;

Som du forhåpentligvis ser er for og while mye mere elegant – goto uttrykker ikke utviklerens intensjoner på samme måte.


comments powered by Disqus