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
squarebeskriver vad funktionen gör.numberbeskriver 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?
xberättar inte att värdet är ett saldo.vberä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
- Skapa
print_menu(). - Skapa
deposit(balance, amount). - Skapa
withdraw(balance, amount). - Skapa
main()som styr programmet. - Använd tydliga variabelnamn.
- 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.