Presentationer Slide 1/1

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 + y

Tydligt

width = 10
height = 20
area = width * height

Lä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 + b

f säger inget om uppgiften.

def add(a, b):
    return a + b

add 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 if eller for.
  • 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 namnTydligare namn
aprice
nuser_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 * h

Koden förklarar sig

area = width * height

Kommentarer 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

InputBearbetningOutput

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

Kod och granskning
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

FunktionAnsvar
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

  1. Förstår jag namnen utan extra förklaring?
  2. Tillför kommentarerna något?
  3. Har varje funktion en tydlig uppgift?
  4. Är programmets delar lätta att hitta?
  5. Ä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)
  1. Förbättra namnen.
  2. Lägg till mellanrum och tomma rader.
  3. 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_case i 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.