Læringsmål

  • Kan bruge if / else og else if til at styre programmets flow
  • Kan anvende switch og ternary operator i passende situationer
  • Kan tage input fra brugeren via Console.ReadLine
  • Kan validere input med TryParse for at undgå runtime-fejl
  • Kan forklare forskellen på lokalt og globalt scope

Betingelser og brugerinput

Programmer er sjældent lineære — de skal kunne tage beslutninger. Conditionals (betingelser) giver dig mulighed for at udføre forskellige handlinger baseret på en bestemt betingelse. Du kan bruge if, else, switch og ternary operator.

If

if er den mest grundlæggende form for betingelse. Kodeblokken kører kun, hvis betingelsen er sand — ellers springes den over.

if (condition)
{
    // Kode, der kører hvis betingelsen er sand
}

Eksempel — er tallet større end 10?

Her udskrives "Tallet er større end 10", fordi number > 10 er true.

Betingelsen i parentes skal altid evaluere til bool. Brug { } omkring blokke med mere end én linje.

Videoer

Se det i praksis

Branching, Ifs, and Conditional Logic [Pt 9] | C# for Beginners

Else

else definerer en alternativ kodeblok, der kører når if-betingelsen er falsk:

if (condition)
{
    // Kode hvis sand
}
else
{
    // Kode hvis falsk
}

Else if

else if tester flere betingelser i træk uden at lave mange indlejrede if-sætninger:

if (condition1)
{
    // Kode hvis condition1 er sand
}
else if (condition2)
{
    // Kode hvis condition2 er sand
}
else if (condition3)
{
    // Kode hvis condition3 er sand
}
else
{
    // Kode hvis ingen af betingelserne er sande
}

Er tallet positivt, negativt eller nul?

Praktisk karakter-eksempel:

Switch

switch vælger mellem forskellige handlinger baseret på værdien af en variabel eller et udtryk — nyttigt når du har mange faste tilfælde:

switch (variable)
{
    case value1:
        // Kode når variable == value1
        break;
    case value2:
        // Kode når variable == value2
        break;
    default:
        // Kode når intet matcher
        break;
}

Moderne C# understøtter også switch expressions — en kortere syntaks:

string message = day switch
{
    "mandag" => "Uge start",
    "fredag" => "Næsten weekend",
    _ => "Hverdag"
};

_ er default-casen — den fanger alle værdier, der ikke matcher.

Ternary operator

Ternary operator (? :) er en kompakt if-else i én linje:

result = (condition) ? valueIfTrue : valueIfFalse;
string status = age >= 18 ? "Voksen" : "Barn";

Ternary er god til simple valg. Brug if/else til kompleks logik — læsbarhed slår korthed.

Brugerinput med Console.ReadLine

Console.ReadLine() læser en linje tekst fra brugeren og returnerer den som en string:

Console.Write skriver uden linjeskift. Console.ReadLine() returnerer string? — nullable, fordi brugeren kan trykke Enter uden at skrive noget.

Konvertering af input

Console.ReadLine() returnerer altid en string. Skal du arbejde med tal, skal du konvertere:

int.Parse() konverterer strengen til et heltal — men programmet crasher, hvis input er ugyldigt (fx "abc").

Fejlhåndtering med TryParse

Brug TryParse til sikker konvertering — metoden returnerer true/false i stedet for at kaste en fejl:

Samme mønster virker for andre typer — altid brug TryParse på brugerinput.

Input med forskellige datatyper

Dobbelt (decimaltal)double.TryParse:

DatoDateTime.TryParse:

Booleanbool.TryParse:

Mønsteret læs → valider → beslut genbruger du i næsten alle konsolprogrammer. Det er kernen i interaktiv programmering.

Scope — lokalt og globalt

Variabler og metoder har et scope (synlighedsområde) — de er kun tilgængelige inden for bestemte dele af koden.

Lokalt scope

Variabler erklæret inde i en metode eller blok har lokalt scope. De forsvinner, når blokken slutter:

Globalt scope

Variabler erklæret uden for metoder (på klasseniveau eller filniveau) har globalt scope og kan tilgås fra flere steder:

Globale variabler kan være farlige — de er synlige overalt og sværere at spore:

  1. Utilsigtet ændring — flere metoder kan ændre samme variabel uden at du opdager det
  2. Navnekonflikter — en lokal variabel kan skygge for en global med samme navn
  3. Sværere at teste — logik spredt over hele programmet
int x = 10;   // Global
<p>void MyMethod()
{
int x = 20;   // Lokal — skygger for global x
Console.WriteLine(x);   // Udskriver 20, ikke 10
}

Behold variabler lokale så langt det er muligt — det giver mere struktureret og vedligeholdelig kode.

Kombinere betingelser og input

Et komplet mini-program, der samler det du har lært:

Git-trin

  • Branch: main
  • Commit: feat: betingelser og input

Opsummering

  • if, else if og else styrer programflow baseret på betingelser
  • switch håndterer mange faste værdier; ternary er en kort if-else
  • Console.ReadLine() læser brugerinput som string
  • Brug TryParse til sikker konvertering — undgå crash ved ugyldigt input
  • Hold variabler lokale så langt det er muligt — undgå globale variabler

Test din viden

Spørgsmål 1

Hvilken type skal betingelsen i en if-sætning evaluere til?

Spørgsmål 2

Hvad returnerer Console.ReadLine()?

Spørgsmål 3

Hvorfor er int.TryParse bedre end int.Parse på brugerinput?

Spørgsmål 4

Hvornår er switch særligt velegnet?

Spørgsmål 5

Hvad gør ternary-operatoren ? :?

Spørgsmål 6

Hvad er lokalt scope?

Spørgsmål 7

Hvad sker der, hvis du erklærer int x = 20; inde i en metode, når der allerede findes en global int x = 10;?