Middle
Jakie kryteria oceny kodu w stylu proceduralnym można uznać za dobre, a jakie za złe?
sobes.tech AI
Odpowiedź od AI
Dobre kryteria:
- Czytelność: Jak łatwo jest zrozumieć, co robi kod, czytając go od góry do dołu.
- Jasność zmiennych i funkcji: Użycie opisowych nazw odzwierciedlających ich cel i logikę.
- Dekompresja: Podział złożonych zadań na mniejsze, zarządzalne funkcje. Każda funkcja powinna wykonywać jedno konkretne zadanie.
- Brak zmiennych globalnych: Minimalizacja użycia zmiennych globalnych w celu zmniejszenia zależności i efektów ubocznych.
- Obsługa błędów: Wyraźne obsługiwanie możliwych błędów i wyjątków.
- Komentarze: Obecne tam, gdzie kod nie jest oczywisty lub w celu wyjaśnienia logiki.
- Spójność stylu: Jednolity styl formatowania i nazewnictwa w całym projekcie.
- Minimalizacja duplikacji kodu: Unikanie powtarzania tych samych bloków kodu.
# Dobry przykład dekompozycji i czytelnych nazw
def calculate_average(numbers):
"""Oblicza średnią z listy liczb."""
if not numbers:
return 0
total = sum(numbers)
return total / len(numbers)
def process_data(data):
# Zakładamy, że 'data' to lista list liczb
averages = []
for row in data:
avg = calculate_average(row)
averages.append(avg)
return averages
Złe kryteria:
- Brak jasności: Kod jest trudny do zrozumienia z powodu zagmatwanej logiki, nieczytelnych nazw lub braku struktury.
- "Spaghetti kod": Liczne przejścia i zależności, które utrudniają śledzenie kolejności wykonania.
- Kod "lazo": Długie, monolityczne funkcje wykonujące wiele niepowiązanych zadań.
- Użycie "magicznych liczb": Nie wyjaśnione stałe numeryczne w kodzie.
- Brak obsługi błędów: Program "upada" w nieprzewidzianych sytuacjach.
- Duplikacja kodu: Identyczne lub bardzo podobne bloki kodu powtarzane w różnych miejscach.
- Niespójny styl: Różne formatowania i nazewnictwo utrudniające czytanie.
# Zły przykład "lazo" i magicznych liczb
def process(d):
t = 0
for r in d:
s = 0
c = 0
for n in r:
s += n
c += 1
if c > 0:
t += s / c
return t / len(d) if len(d) > 0 else 0
Porównanie:
| Dobre kryteria | Złe kryteria |
|---|---|
| Czytelność | Brak jasności ("spaghetti", "lazo") |
| Zrozumiałe nazwy zmiennych i funkcji | Nieczytelne nazwy |
| Dekompresja | Monolityczne funkcje |
| Brak globalnych zmiennych | Nadmierne użycie globalnych zmiennych |
| Wyraźne obsługiwanie błędów | Brak obsługi błędów |
| Komentarze tam, gdzie są potrzebne | Brak komentarzy |
| Spójny styl | Niespójny styl |
| Minimalizacja duplikacji kodu | Duplikacja kodu |