Læringsmål

  • Kan forklare KISS-princippet med egne ord
  • Kan genkende unødvendigt kompliceret kode og forenkle den
  • Kan vælge den simpleste løsning der stadig løser opgaven
  • Kan undgå for tidlig 'smart' kode i GF2-opgaver

KISS — Keep It Simple, Stupid

KISS betyder: lav den simpleste løsning, der virker. Ikke den smarteste, ikke den korteste, ikke den der imponerer — den der er nem at læse, rette og forklare.

KISS handler ikke om at være dum — det handler om at respektere din egen og andres tid. Simpel kode har færre fejl og er hurtigere at forstå i eksamen og i gruppearbejde.

Hvad betyder det i praksis?

Gør (KISS) Undgå
Få trin ad gangen Fem lag af logik i én linje
Klare metodenavne "Clever" one-liners
Løs opgaven nu Byg et "framework" til én opgave
Brug det I har lært Avancerede tricks I ikke har pensum til endnu

KISS passer godt sammen med kode-stil og navngivning — begge handler om, at koden skal være let at forstå.

Eksempel 1 — Betingelse: hold det læsbart

For kompliceret:

bool ok = (age >= 18 && age <= 67) && (hasLicense == true) && (score >= 60 || isGuest == true);
if (ok)
{
    Console.WriteLine("Du må starte.");
}

KISS:

Samme logik — men hvert trin har et navn, du kan forklare mundtligt.

Eksempel 2 — Undgå unødvendig nesting

For kompliceret:

if (input != null)
{
    if (input.Length > 0)
    {
        if (int.TryParse(input, out int value))
        {
            if (value > 0)
            {
                Console.WriteLine(value);
            }
        }
    }
}

KISS (tidlig exit):

// gf2-setup: string input = "42";

if (string.IsNullOrWhiteSpace(input))
{
    Console.WriteLine("Tomt input.");
    return;
}

if (!int.TryParse(input, out int value))
{
    Console.WriteLine("Ikke et tal.");
    return;
}

if (value <= 0)
{
    Console.WriteLine("Skal være positivt.");
    return;
}

Console.WriteLine(value);

Færre niveauer af { — du læser oppefra og stopper, når noget er forkert.

Eksempel 3 — Simpel menu i stedet for "generisk motor"

For kompliceret (overkill til GF2):

var actions = new Dictionary<int, Action>
{
    { 1, () => StartGame() },
    { 2, () => ShowHelp() },
    { 3, () => Environment.Exit(0) }
};

Console.Write("Valg: ");
if (int.TryParse(Console.ReadLine(), out int key) && actions.ContainsKey(key))
{
    actions[key]();
}

KISS:

if/else er helt fint til tre valg. Du behøver ikke Dictionary og Action endnu.

Eksempel 4 — Én opgave ad gangen i Main

For kompliceret:

static void Main()
{
    int a = 5, b = 10, c = 15;
    int sum = a + b + c;
    double avg = sum / 3.0;
    string msg = avg >= 10 ? "Høj" : "Lav";
    Console.WriteLine($"Sum={sum} Avg={avg:F1} Status={msg}");
    for (int i = 0; i < 3; i++) { Console.WriteLine(i * 2); }
    PrintExtra();
    ReadNames();
    // ... 40 linjer mere
}

KISS:

Main fortæller historien — detaljerne bor i små metoder.

Eksempel 5 — Simpel løkke frem for smart trick

For kompliceret:

KISS:

I GF2 er en almindelig for-løkke ofte det rigtige valg — alle kan læse den.

Eksempel 6 — Få datatyper, få koncepter

Opgave: Gem tre elevnavne og print dem.

For kompliceret:

KISS:

Brug array eller List<string> når det er nok — ikke nested dictionaries til en simpel opgave.

Eksempel 7 — Klare beskeder til brugeren

For kompliceret:

KISS:

Brugeren (og din lærer) skal forstå beskeden uden en fejlkode-tabel.

Eksempel 8 — Undgå for mange parametre

For kompliceret:

static void PrintPerson(string first, string last, int age, string city, string country, string email, bool active)
{
    // ...
}

KISS — opdel eller brug det du faktisk skal bruge lige nu:

Til GF2-opgaver: tre–fire parametre er ofte rigeligt. Resten kan vente til I lærer klasser/objekter ordentligt.

Eksempel 9 — Simpel validering

For kompliceret:

static bool IsValidEmail(string email) =>
    !string.IsNullOrEmpty(email) && email.Contains('@') && email.IndexOf('@') == email.LastIndexOf('@')
    && email.Split('@')[1].Contains('.') && email.Length >= 5;

KISS til øvelsesprogram:

Fuldt e-mail-tjek er svært — i en øvelse er "indeholder @" ofte nok til at vise, at du tænker validering.

Eksempel 10 — Når KISS ikke betyder doven kode

KISS er ikke:

  • At kopiere den samme kode ti gange → se DRY
  • At ignorere fejl (catch { } uden besked)
  • At springe navngivning over (x, temp, data)

KISS er:

  • Den løsning en medstuderende kan læse uden at spørge "hvorfor gjorde du det sådan?"

Hurtig tjekliste

Før du afleverer — spørg dig selv:

  1. Kan jeg forklare hver del højt uden at blive forvirret?
  2. Bruger jeg kun sprogkonstruktioner vi har haft pensum i?
  3. Er der en kortere vej med færre begreber — ikke færre linjer?
  4. Ville jeg forstå denne kode om tre uger?

Test din viden

Spørgsmål 1

Hvad er hovedbudskabet i KISS?

Spørgsmål 2

Hvilken version følger KISS bedst?

Spørgsmål 3

Hvornår er en almindelig for-løkke bedre end LINQ one-liners i GF2?

Spørgsmål 4

Hvad er ikke KISS?

Spørgsmål 5

Hvilken fejlbesked til brugeren følger KISS?

Spørgsmål 6

Du skal vise tre menuvalg i et konsolprogram. KISS-valget er ofte: