Sobes.tech
Middle

Какви критерии за оценка на код в процедурен стил могат да се считат за добри, а кои - за лоши?

sobes.tech AI

Отговор от AI

Добри критерии:

  • Четливост: Колко лесно е да се разбере какво прави кодът, като се чете отгоре надолу.
  • Разбираеми имена на променливи и функции: Използване на описателни имена, които отразяват тяхната цел и логика.
  • Декомпозиция: Разделяне на сложни задачи на по-малки, управляеми функции. Всяка функция трябва да изпълнява една конкретна задача.
  • Липса на глобални променливи: Минимизиране на използването на глобални променливи за намаляване на зависимости и странични ефекти.
  • Обработка на грешки: Ясна обработка на възможни грешки и изключения.
  • Коментари: Налични там, където кодът не е ясен или за обяснение на логиката.
  • Последователност в стила: Единен стил на форматиране и именуване в цял проект.
  • Минимизиране на дублиране на код: Избягване на повторение на едни и същи блокове код.
# Добър пример за декомпозиция и разбираеми имена
def calculate_average(numbers):
    """Изчислява средната стойност на списък с числа."""
    if not numbers:
        return 0
    total = sum(numbers)
    return total / len(numbers)

def process_data(data):
    # Предполагаме, че 'data' е списък от списъци с числа
    averages = []
    for row in data:
        avg = calculate_average(row)
        averages.append(avg)
    return averages

Лоши критерии:

  • Несигурност: Кодът е трудно разбираем заради объркана логика, неефективни имена или липса на структура.
  • "Спагети код": Множество преходи и зависимости, които затрудняват проследяването на последователността на изпълнение.
  • "Лист"-код: Дълги, монолитни функции, които изпълняват множество несвързани задачи.
  • Използване на "магически числа": Необяснени числови константи в кода.
  • Липса на обработка на грешки: Програмата "се срива" при възникване на непредвидени ситуации.
  • Дублиране на код: Повтарящи се или много подобни блокове код, които се срещат на различни места.
  • Несъгласуван стил: Различно форматиране и именуване, които затрудняват четенето.
# Лош пример за "линеен" и магически числа
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

Сравнение:

Добри Лоши
Четливост Несигурност ("спагети", "линеен")
Разбираеми имена на променливи и функции Нечетливи имена
Декомпозиция Монолитни функции
Липса на глобални променливи Прекомерна употреба на глобални променливи
Ясна обработка на грешки Липса на обработка на грешки
Коментари там, където е необходимо Липса на коментари
Последователност в стила Несъгласуван стил
Минимизиране на дублиране на код Дублиране на код