Sobes.tech
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