Presentationer Slide 1/1

Kap 4.3

Kodstandard och struktur

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

Mål

Efter lektionen ska du kunna...

  • förklara varför kodstandard behövs
  • använda tydliga namn och korrekt indentering
  • skriva kommentarer som förklarar syftet
  • dela upp kod i funktioner med tydliga ansvar
  • undvika onödig duplicering

Viktigt

Fungerande kod kan ändå vara dålig kod

Programmet kan ge rätt resultat men vara svårt att förstå.

Svårläst kod blir svårare att felsöka och bygga vidare på.

Kod läses ofta fler gånger än den skrivs.

Läsbarhet

Vem ska förstå koden?

  • Du själv om några veckor.
  • En klasskamrat eller kollega.
  • Den som ska testa programmet.
  • Den som ska rätta eller vidareutveckla det.

Koden ska kunna förklara sig själv så långt det är möjligt.

Jämför

Ett otydligt exempel

def x(a):
    return a*a
  • Vad betyder x?
  • Vad innehåller a?
  • Vad är funktionens syfte?

Koden fungerar, men namnen ger nästan ingen information.

Förbättra

Tydliga namn och en docstring

def square(number):
    """Returnerar kvadraten av ett tal."""
    return number * number
  • square beskriver vad funktionen gör.
  • number beskriver parameterns innehåll.
  • """...""" är en docstring som dokumenterar funktionen.

Det är inte en vanlig kommentar. Vanliga kommentarer börjar med #.

Namngivning

Följ samma konvention

total_price
calculate_average()

Variabler och funktioner använder snake_case.

class BankAccount:

Klasser använder PascalCase.

Välj namn som beskriver betydelsen, inte bara datatypen.

Indentering

Indrag visar kodens struktur

if balance >= amount:
    balance -= amount
    print("Uttaget genomfördes.")

print("Programmet fortsätter.")

De indragna raderna tillhör if-blocket.

Den sista raden ligger utanför blocket.

Fel indentering kan ändra programmets beteende eller ge syntaxfel.

Kommentarer

Förklara varför, inte det uppenbara

# Öka saldo med 100
balance += 100

Kommentaren upprepar bara koden.

# Banken tillåter inte att kontot blir negativt.
if amount > balance:
    return balance

Kommentaren förklarar regeln bakom kontrollen.

DRY

Don't Repeat Yourself

print("1. Visa saldo")
print("2. Sätt in pengar")
print("3. Avsluta")

Om samma meny skrivs på flera platser måste alla kopior ändras.

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

Nu finns menyn på ett ställe.

Struktur

En funktion ska ha ett tydligt ansvar

print_menu()

Skriver bara ut menyn.

deposit(balance, amount)

Beräknar ett nytt saldo efter en insättning.

main()

Styr programmets övergripande flöde.

Före

All logik i samma block

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

Problem

Varför är koden svårläst?

  • x berättar inte att värdet är ett saldo.
  • v berättar inte att värdet är ett menyval.
  • Meny, inmatning och programlogik är blandade.
  • Menykoden kan inte återanvändas separat.

Problemet är inte att koden är trasig. Problemet är att den är svår att underhålla.

Steg 1

Byt till tydliga namn

saldo = 0

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

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

Beteendet är samma, men variablernas betydelse syns direkt.

Steg 2

Flytta menyn till en funktion

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

Funktionen har ett enda ansvar.

Huvudloopen kan anropa funktionen när menyn ska visas.

Efter

Den förbättrade helheten

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

Riktlinjer

Praktiska vanor

  • Använd beskrivande namn.
  • Håll funktioner korta och fokuserade.
  • Använd tomma rader mellan logiska delar.
  • Kommentera komplexa beslut, inte självklar kod.
  • Flytta upprepad kod till funktioner.

Öva själv

Strukturera ett bankprogram

  1. Skapa print_menu().
  2. Skapa deposit(balance, amount).
  3. Skapa withdraw(balance, amount).
  4. Skapa main() som styr programmet.
  5. Använd tydliga variabelnamn.
  6. Testa insättning, uttag och felaktiga val.

Kontrollera

Frågor innan koden är klar

  • Förstår man namnen utan extra förklaring?
  • Har varje funktion ett tydligt ansvar?
  • Finns samma logik på flera platser?
  • Förklarar kommentarerna varför något görs?
  • Är koden enkel att testa del för del?

Sammanfattning

Kom ihåg

  • Kodstandard gör kod lättare att läsa och underhålla.
  • Tydliga namn minskar behovet av kommentarer.
  • Kommentarer ska främst förklara varför.
  • DRY minskar duplicerad kod.
  • Bra struktur är lika viktig som rätt resultat.