Hjem » Siste artikler » If-setninger for nybegynnere: slik tar programmet ditt valg steg for steg

If-setninger for nybegynnere: slik tar programmet ditt valg steg for steg

Hovedillustrasjon
Hovedillustrasjon. Foto: Artem Sapegin / Unsplash.

If-setninger er et av de første verktøyene du lærer i programmering, og et av de viktigste du noen gang kommer til å bruke. Uansett om du lager en liten nettside, et enkelt spill eller et system for en nettbutikk, trenger du å gi programmet mulighet til å ta valg.

I denne artikkelen ser vi på hva if-setninger egentlig gjør, hvordan du kan tenke logikk på en enkel måte, og hvordan du unngår vanlige feil. Eksemplene bruker Java, men logikken er den samme i de fleste språk.

Hva er en if-setning, egentlig?

En if-setning lar programmet ditt svare på et spørsmål av typen “er dette sant?”. Hvis svaret er sant, kjører programmet en bestemt del av programmet. Hvis svaret ikke er sant, hopper det videre eller gjør noe annet.

I stedet for å tenke “if er magisk”, er det nyttig å se på det som en veldig enkel beslutning:hvis betingelsen er sann, gjør dette, ellers la være. Alt handler om betingelsen, altså uttrykket inne i parentesene.

Grunnstrukturen i en if-setning

En typisk if-setning i Java ser slik ut:

Eksempel:

int alder = 20;
if (alder >= 18) {
   System.out.println("Du er myndig.");
}

Her skjer følgende: først lagres tallet 20 i variabelen alder. Så sjekker if-setningen om alder >= 18 er sant. Siden 20 er større enn eller lik 18, er betingelsen sann, og teksten blir skrevet ut.

If, else og else if: tre byggeklosser

Ofte holder det ikke å bare spørre “er dette sant?”. Du vil gjerne gjøre én ting hvis betingelsen er sann, og noe annet hvis den er usann. Da bruker duelse.

Eksempel med else:

int alder = 16;
if (alder >= 18) {
   System.out.println("Du er myndig.");
} else {
   System.out.println("Du er ikke myndig ennå.");
}

Når du har flere muligheter, bruker duelse iftil å bygge en kjede av valg.

Eksempel med else if:

int poeng = 73;
if (poeng >= 90) {
   System.out.println("Karakter: A");
} else if (poeng >= 80) {
   System.out.println("Karakter: B");
} else if (poeng >= 70) {
   System.out.println("Karakter: C");
} else {
   System.out.println("Karakter: D eller lavere");
}

Rekkefølge betyr mer enn du tror

En vanlig misforståelse er å tro at programmet “finner den beste matchen”. Det gjør det ikke, det går ovenfra og ned og stopper ved første betingelse som er sann.

Endrer du rekkefølgen i eksemplet over til å sjekke poeng >= 70 først, vil alt fra 70 og oppover bli “Karakter: C”, selv om du har flere else if under. Derfor er hovedregelen:start med det smaleste eller strengeste tilfellet, og ta de bredere til slutt.

Lag lesbare betingelser, ikke gåter

Det er fristende å presse mye logikk inn i én linje, men det gjør det ofte vanskeligere å forstå hva som skjer. Tenk på at du eller noen andre skal lese dette senere og raskt se hva som menes.

Sammenlign disse to variantene, som gjør det samme:

Variant 1 (tung å lese):

if (alder >= 18 && harBil || harForesatt && !butikkenStengt) { ... }

Variant 2 (mer lesbar):

boolean erMyndig = alder >= 18;
boolean harLovligFølge = harBil || harForesatt;
boolean kanHandle = !butikkenStengt;
if (erMyndig && harLovligFølge && kanHandle) { ... }

I den andre varianten kan du faktisk lese betingelsen som en setning. Det gjør det mye enklere å oppdage logiske feil.

Vanlige logiske operatorer forklart enkelt

Tematisk illustrasjon
Tematisk illustrasjon. Foto: Startup Stock Photos / Pexels.

Når du bygger betingelser, bruker du ofte tre typer logikk: og, eller og ikke. I Java og mange andre språk skrives de slik:

  • &&betyr “og”: begge må være sanne
  • ||betyr “eller”: minst én må være sann
  • !betyr “ikke”: snur sann til usann og omvendt

Eksempler:

if (alder >= 18 && harLegitimasjon) { ... } betyr at begge betingelsene må være sanne.

if (erHelg || erFridag) { ... } betyr at enten helg eller fridag er nok.

if (!erInnlogget) { ... } betyr at blokken bare kjøres når personen ikke er innlogget.

Typiske feil og hvordan du unngår dem

Noen feil dukker opp igjen og igjen når du jobber med if-setninger. Det er nyttig å kjenne dem igjen tidlig.

  • Bruke likhet feil:I mange språk betyr = tildeling, mens == eller .equals(...) brukes til å sammenligne. I Java må du for eksempel bruke .equals() for strenger.
  • Glemme klammeparenteser:Selv om du teknisk kan droppe dem for én linje, blir det fort feil når du senere legger til flere linjer. Bruk alltid { } for klarhet.
  • Overkompliserte betingelser:Hvis du ikke lenger klarer å lese if-linjen høyt som en forståelig setning, bør du dele den opp i mindre biter med mellomvariabler.

Slik tenker du steg for steg med if-setninger

En god øvelse er å beskrive det du vil ha til med ord først, før du skriver programmet. Si at du skal vise “Gratis frakt” i en nettbutikk når handlekurven oppfyller noen regler.

Du kan for eksempel skrive dette i klartekst: “Gratis frakt hvis summen er over 800, eller hvis brukeren har premium-medlemskap, men bare hvis landet er Norge”. Deretter oversetter du det til kode, litt og litt.

Eksempel:

int sum = 750;
boolean harPremium = true;
String land = "NO";
boolean overGrense = sum >= 800;
boolean erNorge = land.equals("NO");
boolean harGratisFrakt = (overGrense || harPremium) && erNorge;
if (harGratisFrakt) {
   System.out.println("Du har gratis frakt.");
} else {
   System.out.println("Frakt kommer i tillegg.");
}

Legg merke til at vi bruker mellomvariabler som beskriver logikken. Det gjør det lettere å se om betingelsen faktisk matcher det du sa med ord.

Når bør du vurdere noe annet enn mange if-setninger?

Hvis du oppdager at du har en lang kjede med nesten like if/else if, kan det være et tegn på at du trenger en annen tilnærming. Noen typiske alternativer er:

  • switchi språk som Java og C#, når du sjekker mange faste verdier for samme variabel
  • Oppslagsstruktursom en map eller dictionary, når du oversetter én verdi til en annen
  • Egne funksjonersom kapsler inn komplisert logikk bak et beskrivende navn

Poenget er ikke å unngå if-setninger, men å unngå at hele programmet ditt blir én stor, uoversiktlig if-blokk. Små, tydelige beslutninger er enklere å teste og feilsøke.

Videre steg: øv på små, konkrete scenarier

Den raskeste måten å bli trygg på if-setninger, er å lage mange små eksempler som løser hverdagslige situasjoner. For eksempel kan du prøve å skrive logikk for billettpriser, åpningstider, rabattkoder eller spillregler.

For hver øvelse kan du stille deg tre spørsmål: Hva er beslutningen jeg skal ta? Hvilke data trenger jeg for å ta beslutningen? Hvordan kan jeg uttrykke dette som en enkel if-setning eller en liten kjede med if/else?

Hvis du trener på å tenke slik, blir if-setninger et naturlig verktøy i verktøykassen din, ikke noe mystisk du bare kopierer fra andres eksempler.

0 kommentarer