Hjem » Siste artikler » While-løkker i C#: slik styrer du gjentakelser uten å miste kontrollen

While-løkker i C#: slik styrer du gjentakelser uten å miste kontrollen

Hovedillustrasjon
Hovedillustrasjon. Foto: Daniil Komov / Pexels.

While-løkker er en av de enkleste måtene å gjenta noe i et program, men også en av de letteste å misbruke. Mange nybegynnere har opplevd “uendelige løkker” som henger hele programmet.

I denne artikkelen ser vi på while-løkker i C#, hvordan de fungerer, vanlige feil og hvordan du kan bruke dem trygt og ryddig i praktiske situasjoner.

Hva er en while-løkke, egentlig?

En while-løkke gjentar en kodeblokk så lenge en betingelse er sann. Du kan tenke på det som: “Så lenge dette stemmer, gjør dette igjen”.

I C# ser den enkleste varianten slik ut:

Eksempel:

int teller = 0;
while (teller < 5)
{
   Console.WriteLine(teller);
   teller++;
}

Her starter vi på 0, skriver ut verdien, øker telleren og fortsetter til teller ikke lenger er mindre enn 5. Når betingelsen blir usann, stopper løkken.

Tre ting som må være på plass

For å unngå kaos med while-løkker er det nyttig å huske at du alltid trenger tre ting som henger sammen. Mangler én av dem, risikerer du en uendelig løkke eller uforståelig logikk.

  • Startverdi: en initial verdi, ofte en variabel du skal endre
  • Betingelse: en logisk test som avgjør om løkken skal fortsette
  • Endring: noe som faktisk endrer situasjonen inni løkken

I eksemplet over er int teller = 0; startverdi, teller < 5 betingelse og teller++; endringen. Disse tre må passe logisk sammen, ellers mister du kontrollen.

Vanlig nybegynnerfelle: uendelige løkker

En uendelig løkke oppstår når betingelsen aldri blir usann. Det skjer typisk når du glemmer å oppdatere variabelen som betingelsen bygger på, eller betingelsen er formulert feil.

Dårlig eksempel:

int teller = 0;
while (teller < 5)
{
   Console.WriteLine("Hei");
}

Her endres aldri teller, så uttrykket teller < 5 er alltid sant. Programmet vil bare fortsette å skrive “Hei” til du stopper det manuelt.

En enkel vane som forebygger dette er å alltid sjekke “de tre tingene” før du kjører programmet: hvor starter jeg, hva er betingelsen, hva endrer seg?

while vs do-while: hva er forskjellen?

C# har også en variant som heter do-while. Forskjellen handler om når betingelsen sjekkes. I en vanlig while-løkke sjekkes betingelsen først og koden inni kan bli kjørt null ganger.

I en do-while kjører koden inni minst én gang, og så sjekkes betingelsen etterpå:

int valg;
do
{
   Console.WriteLine("Skriv inn 1 for å fortsette, 0 for å avslutte:");
   valg = int.Parse(Console.ReadLine());
} while (valg != 0);

Dette er nyttig når du vet at noe må skje minst én gang, for eksempel å vise en meny eller lese et første input fra brukeren.

Praktisk eksempel: les brukerinndata til det gir mening

Tematisk illustrasjon
Tematisk illustrasjon. Foto: Chris Ried / Unsplash.

Et typisk bruksområde er å be om inndata helt til brukeren gir noe gyldig. Mens en for-løkke ofte passer når du vet hvor mange ganger noe skal gjentas, passer while godt når du ikke vet antall på forhånd.

Eksempel: les et tall mellom 1 og 10

int tall;
Console.WriteLine("Skriv inn et tall mellom 1 og 10:");
string input = Console.ReadLine();
while (!int.TryParse(input, out tall) || tall < 1 || tall > 10)
{
   Console.WriteLine("Ugyldig verdi. Prøv igjen:");
   input = Console.ReadLine();
}
Console.WriteLine($"Du skrev: {tall}");

Her stopper vi ikke hele programmet hvis brukeren skriver noe feil. I stedet lar while-løkka oss fortsette å spørre til vi får noe vi kan jobbe med.

Gode vaner når du skriver while-løkker

Selv en enkel while-løkke kan bli vanskelig å forstå om du stapper for mye logikk inn i betingelsen eller glemmer å rydde i variabler. Noen enkle vaner kan gjøre stor forskjell.

  • Hold betingelsen lesbar: bryt ut kompliserte uttrykk i tydelige boolske variabler
  • Unngå skjulte endringer: ikke gjem endringen i en funksjon som gjør “litt av hvert”
  • Gi variabler meningsfulle navn: teller er bedre enn i når du er ny

Eksempel på lesbar betingelse:

bool harMerData = true;
while (harMerData)
{
   // les eller prosesser noe
   harMerData = FinnesMerData();
}

Når bør du ikke bruke while?

Selv om while-løkker er fleksible, er de ikke alltid det beste valget. Hvis du vet nøyaktig hvor mange ganger noe skal gjentas, er en for-løkke ofte tydeligere.

Mens en while-løkke passer godt på “gjenta til dette skjer”, passer en for-løkke på “gjenta n ganger”. Prøv å velge den varianten som gir mest mening når du leser koden høyt for deg selv.

Hvis du kjenner at betingelsen begynner å ligne et lite matteproblem, kan det være et tegn på at du bør refaktorere: flytte ut logikk til egne metoder, lage tydeligere variabelnavn eller vurdere en annen struktur.

Slik feilsøker du en mens-løkke som henger

Hvis programmet plutselig “fryser”, er en uendelig løkke ofte synderen. Da lønner det seg å feilsøke systematisk i stedet for å gjette.

  • Legg inn en midlertidig Console.WriteLine inni løkken for å se om den faktisk kjører
  • Skriv ut variabler som inngår i betingelsen for å se om de endrer seg
  • Tenk gjennom om betingelsen i det hele tatt kan bli usann, gitt endringene du har

Når du finner årsaken, prøv å forstå hvorfor det skjedde og hvordan du kan skrive betingelsen tydeligere neste gang. Over tid bygger du en intuisjon som gjør slike feil sjeldnere.

Oppsummert: tenk i start, betingelse, endring

While-løkker i C# er et enkelt, men kraftig verktøy for gjentakelser når du ikke vet antall på forhånd, for eksempel ved brukerinndata eller lesing fra en datastrøm.

Hvis du alltid sjekker de tre byggesteinene startverdi, betingelse og endring, skriver korte og lesbare betingelser og feilsøker systematisk, blir while-løkker et trygt verktøy i verktøykassen i stedet for en kilde til frustrerende uendelige programmer.

0 kommentarer