Programmering nivå 2

Kap 4.3 – Kodstandard och struktur

Skriv kod som är lätt att läsa, förstå och underhålla.

Mål med lektionen

När du har arbetat klart med denna lektion ska du:

  • Förstå varför kodstandard är viktigt i programmering.
  • Känna till vanliga konventioner för kodstruktur i Python.
  • Kunna skriva kod som är lätt att läsa, förstå och underhålla.
  • Använda kommentarer och namngivning för att förklara syfte och funktion.

Så här lär du dig bäst

För att lära dig kodstandard behöver du jämföra bra och dåliga exempel. Läs kod från tidigare uppgifter och förbättra den enligt standard. Testa att samarbeta med en klasskamrat och se om ni kan förstå varandras kod utan att förklara muntligt. Följ riktlinjerna för ditt språk konsekvent.

Centrala begrepp

  • läsbarhet – Hur lätt det är för andra att förstå din kod.
  • indentering – Att koden har rätt avstånd och är tydligt strukturerad.
  • namngivning – Att använda beskrivande namn på variabler, metoder och klasser.
  • kommentarer – Att skriva förklaringar i koden utan att det påverkar körningen.
  • DRY-principen – "Don't Repeat Yourself" – undvik upprepningar i kod.

Exempel: Python-standard

Dåligt:

def x(a):
    return a*a

Bättre:

def square(number):
    """Returnerar kvadraten av ett tal."""
    return number * number

Texten mellan """ är en docstring som dokumenterar funktionen. Den kan läsas av exempelvis help() och olika utvecklingsverktyg. En vanlig kommentar börjar i stället med # och används för korta förklaringar inne i koden.

  • Funktioner och variabler skrivs i snake_case.
  • Kommentarer ska förklara varför, inte vad koden gör.
  • Kod bryts i lagom långa delar med tydlig logik.

Riktlinjer

  • Skriv korta metoder – helst inte längre än 20 rader.
  • Använd tomma rader för att dela upp logiska delar.
  • Namnge allt så tydligt att man förstår koden utan kommentar.
  • Kommentera komplex logik, inte självklarheter.

Struktur i praktiken

Kodstandard handlar inte bara om hur koden ser ut. Det handlar också om att dela upp programmet så att varje del har ett tydligt ansvar. En vanlig förbättring är att flytta upprepade eller svårlästa kodblock till egna funktioner.

Dåligt strukturerat:

x = 0

while True:
    print("1. Visa saldo")
    print("2. Sätt in 100")
    print("3. Avsluta")
    v = input("Val: ")

    if v == "1":
        print(x)
    elif v == "2":
        x = x + 100
    elif v == "3":
        break

Koden fungerar, men namnen x och v berättar inte vad de betyder. Menyn, inmatningen och logiken ligger också blandade i samma block.

Bättre strukturerat:

def skriv_ut_meny():
    print("1. Visa saldo")
    print("2. Sätt in 100")
    print("3. Avsluta")

saldo = 0

while True:
    skriv_ut_meny()
    val = input("Val: ")

    if val == "1":
        print(saldo)
    elif val == "2":
        saldo += 100
    elif val == "3":
        break

Nu säger namnen mer om syftet. Funktionen skriv_ut_meny() gör bara en sak: skriver ut menyn. Variabeln saldo är tydligare än x, och val är tydligare än v.

Interaktiv övning: förbättra kodstruktur

Välj en förbättring och se hur den gör koden lättare att läsa. Övningen handlar om kodkvalitet, inte om att ändra vad programmet gör.

Välj en förbättring och tryck på Visa förbättring.

Programmering 2-koppling: bra struktur gör det lättare att felsöka, testa och bygga vidare på programmet i senare kapitel.

Öva själv

Övning 1: Ge koden tydliga namn

Skriv om funktionen def x(a, b): return a * b med ett beskrivande funktionsnamn och tydliga parameternamn. Anropa funktionen och skriv ut resultatet.

Fundera: Kan en läsare förstå funktionens syfte utan att se dess kod?

När du har försökt själv: visa lösningsförslaget till övning 1 på GitHub.

Övning 2: Följ Pythons namnstandard

Skapa en klass för en spelare med två attribut och en metod som visar spelarens status. Använd PascalCase för klassnamnet och snake_case för variabler och metoder. Använd tydliga namn i hela programmet.

Fundera: Vilken namnstandard används för klasser och vilken används för funktioner?

När du har försökt själv: visa lösningsförslaget till övning 2 på GitHub.

Övning 3: Dokumentera med docstrings

Skriv funktionerna calculate_average(numbers) och find_largest(numbers). Ge båda en kort docstring som beskriver vad funktionen returnerar. Använd kommentarer endast om du behöver förklara varför en kodrad finns.

Fundera: Vad är skillnaden mellan en docstring och en vanlig kommentar?

När du har försökt själv: visa lösningsförslaget till övning 3 på GitHub.

Övning 4: Undvik upprepad kod

Ett program skriver ut namn och poäng för tre spelare med tre nästan identiska kodblock. Skapa i stället funktionen print_result(name, points), lägg resultaten i en lista och använd en loop. Programmet ska ge samma utskrift men följa DRY-principen.

Fundera: Vilken kod finns nu bara på ett ställe?

När du har försökt själv: visa lösningsförslaget till övning 4 på GitHub.

Övning 5: Strukturera ett bankprogram

Svårare övning: Här delar du upp ett helt menyprogram i mindre delar med tydliga ansvar.

Skapa funktionerna print_menu(), read_amount(), deposit(balance, amount), withdraw(balance, amount) och main(). Använd tydliga namn, docstrings och säker talinmatning. Uttag får inte vara större än saldot.

Fundera: Vilket enda ansvar har varje funktion?

När du har försökt själv: visa lösningsförslaget till övning 5 på GitHub.

Övning 6: Strukturera ett anteckningsprogram

Svårare övning: Här kombinerar du kodstandard med filhantering, felhantering, funktioner och meny.

Bygg ett program som kan lägga till och visa anteckningar från en textfil. Dela upp programmet i print_menu(), add_note(filename, note), show_notes(filename) och main(). Hantera en saknad fil tydligt och dokumentera funktionerna med korta docstrings.

Fundera: Hur gör strukturen programmet enklare att felsöka och bygga vidare på?

När du har försökt själv: visa lösningsförslaget till övning 6 på GitHub.

Sammanfattning

  • Kodstandard gör att fler kan läsa, förstå och vidareutveckla din kod.
  • Struktur och tydlighet gör dina program mer professionella.
  • God kodstil är lika viktig som att programmet fungerar.

Tillbaka till Kapitel 4