Sobes.tech
Middle

Jaké kritéria hodnocení kódu ve stylu procedurálního programování lze považovat za dobrá a která za špatná?

sobes.tech AI

Odpověď od AI

Dobrá kritéria:

  • Čitelnost: Jak snadno pochopit, co kód dělá při čtení shora dolů.
  • Srozumitelná jména proměnných a funkcí: Použití popisných názvů odrážejících jejich účel a logiku.
  • Dekompozice: Rozdělení složitých úkolů na menší, zvládnutelné funkce. Každá funkce by měla plnit jeden konkrétní úkol.
  • Absence globálních proměnných: Minimalizace používání globálních proměnných ke snížení závislostí a vedlejších efektů.
  • Ošetření chyb: Jasné ošetření možných chyb a výjimek.
  • Komentáře: Přítomny tam, kde kód není zřejmý nebo pro vysvětlení logiky.
  • Konzistence stylu: Jednotný styl formátování a pojmenovávání v celém projektu.
  • Minimalizace duplicitního kódu: Vyhýbání se opakování stejných bloků kódu.
# Dobrá ukázka dekompozice a srozumitelných jmen
def calculate_average(numbers):
    """Vypočítá průměr seznamu čísel."""
    if not numbers:
        return 0
    total = sum(numbers)
    return total / len(numbers)

def process_data(data):
    # Předpokládáme, že 'data' je seznam seznamů čísel
    averages = []
    for row in data:
        avg = calculate_average(row)
        averages.append(avg)
    return averages

Špatná kritéria:

  • Nejasnost: Kód je těžko pochopitelný kvůli zmatené logice, neefektivním jménům nebo absenci struktury.
  • "Špagetový kód": Mnoho přechodů a závislostí, které činí sledování sekvence provádění obtížným.
  • "Lívanec"-kód: Dlouhé, monolitické funkce, které vykonávají mnoho nesouvisejících úkolů.
  • Použití "magických čísel": Nepopsané číselné konstanty v kódu.
  • Chybějící ošetření chyb: Program "padá" při neočekávaných situacích.
  • Duplicitní kód: Stejné nebo velmi podobné bloky kódu se opakují na různých místech.
  • Nesourodý styl: Různé formátování a pojmenování ztěžují čtení.
# Špatný příklad "líné" a magických čísel
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

Porovnání:

Dobré Špatné
Čitelnost Nejasnost ("špaget", "lívanec")
Srozumitelná jména proměnných a funkcí Nečitelná jména
Dekompozice Monolitické funkce
Absence globálních proměnných Nadměrné používání globálních proměnných
Jasné ošetření chyb Chybějící ošetření chyb
Komentáře tam, kde je třeba Chybějící komentáře
Konzistence stylu Nekonzistentní styl
Duplicitní kód minimalizace Duplicitní kód