Sobes.tech
Middle

Ce criterii de evaluare a codului în stil procedural pot fi considerate bune și care rele?

sobes.tech AI

Răspuns de la AI

Criterii buni:

  • ** lizibilitate:** Cât de ușor este să înțelegi ce face codul citindu-l de sus în jos.
  • Claritatea variabilelor și funcțiilor: Utilizarea unor nume descriptive care reflectă scopul și logica lor.
  • Decompozitie: Împărțirea sarcinilor complexe în funcții mai mici și gestionabile. Fiecare funcție trebuie să îndeplinească o sarcină specifică.
  • Lipsa variabilelor globale: Minimizarea utilizării variabilelor globale pentru a reduce dependențele și efectele secundare.
  • Gestionarea erorilor: Tratarea explicită a posibilelor erori și excepții.
  • Comentarii: Prezente acolo unde codul nu este evident sau pentru a explica logica.
  • Consistența stilului: Stil uniform de formatare și denumire în întregul proiect.
  • Minimizarea duplicării codului: Evitarea repetării aceluiași bloc de cod.
# Exemplu bun de decompozitie și nume clare
def calculate_average(numbers):
    """Calculează media unei liste de numere."""
    if not numbers:
        return 0
    total = sum(numbers)
    return total / len(numbers)

def process_data(data):
    # Presupunem că 'data' este o listă de liste de numere
    averages = []
    for row in data:
        avg = calculate_average(row)
        averages.append(avg)
    return averages

Criterii rele:

  • Lipsa clarității: Codul este dificil de înțeles din cauza logicii confuze, numelor neclare sau lipsei de structură.
  • "Cod spaghetti": Multe treceri și dependențe care fac dificilă urmărirea secvenței de execuție.
  • "Lazo"-cod: Funcții lungi și monolitice care efectuează multiple sarcini nelegate.
  • Utilizarea de "numere magice": Constante numerice fără explicație în cod.
  • Lipsa gestionării erorilor: Programul "se prăbușește" în situații neprevăzute.
  • Dublarea codului: Blocuri identice sau foarte asemănătoare repetate în diferite locuri.
  • Stil incoerent: Formatare și denumire diferite care îngreunează citirea.
# Exemplu slab de "lazo" și numere magice
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

Comparație:

Criterii bune Criterii rele
Lizibilitate Lipsa de claritate ("spagetti", "lazo")
Nume de variabile și funcții înțelese Nume ilizibile
Decompozitie Funcții monolitice
Fără variabile globale Utilizare excesivă a variabilelor globale
Gestionare explicită a erorilor Lipsa gestionării erorilor
Comentarii acolo unde sunt necesare Lipsa comentariilor
Stil coerent Stil incoerent
Minimizarea duplicării codului Duplicare de cod