Kapitel 11
Struktur och läsbar kod
Skriv kod som människor kan förstå, ändra och felsöka.
Mål
Efter kapitlet ska du kunna...
- välja tydliga namn på variabler och funktioner
- skriva kommentarer som tillför information
- dela upp program i funktioner
- organisera input, bearbetning och output
- förbättra kompakt eller otydlig kod
Kärnidé
Kod läses oftare än den skrivs
Du behöver själv förstå koden senare.
Andra kan behöva felsöka eller utveckla den.
Läsbarhet minskar risken för missförstånd och fel.
11.1
Namn ska beskriva värdets betydelse
Otydligt
x = 10
y = 20
z = x + yTydligt
width = 10
height = 20
area = width * heightLäs koden som en mening
Tydliga namn förklarar beräkningen
area = width * height
”Arean är bredden multiplicerad med höjden.”
Jämför med z = x * y, där betydelsen saknas.
Funktionsnamn
Beskriv vad funktionen gör
def f(a, b):
return a + bf säger inget om uppgiften.
def add(a, b):
return a + badd beskriver operationen.
Regler för namn
Vad Python tillåter
- Börja med bokstav eller underscore.
- Fortsätt med bokstäver, siffror eller underscore.
- Använd inte reserverade ord som
ifellerfor. - Python skiljer på stora och små bokstäver.
Stil
Använd snake_case
total_price = 100
user_name = "Anna"
future_age = age + 5
Små bokstäver och underscore mellan orden är vanlig Python-stil.
Var konsekvent med språk och benämningar i hela programmet.
Kontrollfråga
Vilka namn hjälper läsaren?
| Svagt namn | Tydligare namn |
|---|---|
a | price |
n | user_name |
calc() | calculate_discount() |
Det bästa namnet beror på vad värdet eller funktionen betyder i programmet.
11.2
Kommentarer förklarar kod
# Detta är en kommentar
print("Hej")
Text efter # körs inte av Python.
Kommentaren är till för människor som läser koden.
Bra kommentar
Förklara varför
# Lägg till fem år för att visa framtida ålder
future_age = age + 5
Koden visar redan vad som räknas ut.
Kommentaren förklarar syftet med beräkningen.
Onödig kommentar
Upprepa inte självklar kod
# Sätt x till 10
x = 10
Kommentaren ger ingen ny information.
Ett tydligare namn kan vara bättre: max_attempts = 10.
Kod före kommentar
Gör koden självklar när det går
Kommentar kompenserar
# Räkna ut area
a = w * hKoden förklarar sig
area = width * heightKommentarer måste stämma
Fel kommentar är värre än ingen
# Lägg till fem år
future_age = age + 10
Kommentaren och koden motsäger varandra.
Uppdatera kommentaren när beteendet ändras – eller ta bort den.
11.3
Struktur gör programmets delar synliga
Tomma rader och funktioner kan skilja delarna åt.
Tydliga steg
Input, bearbetning, output
# Input
age = int(input("Hur gammal är du? "))
# Bearbetning
future_age = age + 5
# Output
print(f"Om fem år är du {future_age} år")
Dela upp i funktioner
Ge varje uppgift ett namn
def greet(name):
print(f"Hej {name}")
def calculate_future_age(age):
return age + 5
name = input("Vad heter du? ")
age = int(input("Hur gammal är du? "))
greet(name)
future_age = calculate_future_age(age)
print(f"Om fem år är du {future_age} år")
Undvik upprepning
Samla samma beteende
print("Hej Anna")
print("Hej Erik")
print("Hej Sara")def greet(name):
print(f"Hej {name}")
greet("Anna")
greet("Erik")
greet("Sara")Ändra hälsningen på ett ställe i stället för tre.
Interaktiv kodgranskning
Gör koden läsbar
Välj ett steg.
11.4
Läsbar kod ger läsaren luft
Svårläst
n=input("namn")
a=int(input("ålder"))
print("hej",n,a+5)Läsbar
name = input("Vad heter du? ")
age = int(input("Hur gammal är du? "))
future_age = age + 5
print(f"Hej {name}")
print(f"Om fem år är du {future_age} år")Konsekvent formatering
Mellanrum och tomma rader hjälper
- Använd mellanrum runt operatorer:
total = price * amount. - Använd konsekventa indrag.
- Lämna tomma rader mellan programmets delar.
- Skriv inte flera instruktioner på samma rad.
En funktion – ett ansvar
Avgränsa uppgiften
| Funktion | Ansvar |
|---|---|
calculate_subtotal() | beräkna delsumma |
calculate_discount() | beräkna rabatt |
print_receipt() | skriva kvittot |
Små tydliga funktioner kan testas och ändras var för sig.
Större exempel · funktioner
Ett strukturerat kassaprogram
def calculate_subtotal(price, amount):
return price * amount
def calculate_discount(subtotal, percent):
return subtotal * percent / 100
def print_receipt(product, total):
print(f"Vara: {product}")
print(f"Att betala: {total} kr")
Större exempel · huvudprogram
Input och samarbete
product = input("Vilken vara? ")
price = int(input("Pris per vara: "))
amount = int(input("Antal: "))
discount_percent = int(input("Rabatt i procent: "))
subtotal = calculate_subtotal(price, amount)
discount = calculate_discount(subtotal, discount_percent)
total = subtotal - discount
print_receipt(product, total)
Kodgranskning
Fem frågor före du är klar
- Förstår jag namnen utan extra förklaring?
- Tillför kommentarerna något?
- Har varje funktion en tydlig uppgift?
- Är programmets delar lätta att hitta?
- Är stilen konsekvent?
11.5 · Övning
Förbättra i tre omgångar
n=input("namn")
x=int(input("tal"))
y=x*2
print("hej",n)
print(y)
- Förbättra namnen.
- Lägg till mellanrum och tomma rader.
- Dela upp hälsning och beräkning i funktioner.
Kontrollfråga
Behövs kommentaren?
# Multiplicera priset med antalet
total_price = price * amount
Variabelnamnen och uttrycket visar redan vad som händer.
Kommentaren kan tas bort om det inte finns ett viktigt skäl bakom beräkningen.
Sammanfattning
Kom ihåg
- Namn ska beskriva värden och uppgifter.
- Använd konsekvent
snake_casei Python. - Kommentarer ska förklara sådant koden inte redan säger.
- Dela upp program i tydliga steg och funktioner.
- Undvik onödig upprepning.
- Mellanrum, tomma rader och konsekvent stil förbättrar läsbarheten.