KISS — Keep It Simple
Præsenter som slidesLæ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:
- Kan jeg forklare hver del højt uden at blive forvirret?
- Bruger jeg kun sprogkonstruktioner vi har haft pensum i?
- Er der en kortere vej med færre begreber — ikke færre linjer?
- Ville jeg forstå denne kode om tre uger?
Test din viden
Spørgsmål 1
Hvad er hovedbudskabet i KISS?
KISS handler om forståelighed — ikke om at presse alt ind på én linje eller imponere med avancerede tricks.
Spørgsmål 2
Hvilken version følger KISS bedst?
Tidlig exit og flade strukturer gør koden nemmere at følge — især når du debugger.
Spørgsmål 3
Hvornår er en almindelig for-løkke bedre end LINQ one-liners i GF2?
I GF2 er en klassisk for-løkke ofte det rigtige valg — den er eksplicit og let at forklare til eksamen.
Spørgsmål 4
Hvad er ikke KISS?
Gentagen kode er et DRY-problem. KISS og DRY arbejder sammen — simpel struktur, ikke copy-paste.
Spørgsmål 5
Hvilken fejlbesked til brugeren følger KISS?
Brugeren skal forstå beskeden uden at kende interne fejlkoder.
Spørgsmål 6
Du skal vise tre menuvalg i et konsolprogram. KISS-valget er ofte:
Til få valg er if/else helt rigeligt — simpelt at læse og rette.