Programming Paradigms

Три способа думать о коде

1. Structured Programming

Код как последовательность шагов

❌ Без структуры

data = [1, 2, None, 4]
result = []
i = 0
while i < len(data):
    if data[i] == None:
        j = 0
        while j < len(result):
            result[j] = result[j] * 2
            j += 1
    else:
        result.append(data[i])
    i += 1

✅ Структурировано

def clean_data(data):
    return [x for x in data if x is not None]

def double_list(lst):
    return [x * 2 for x in lst]

# Последовательность действий
clean = clean_data(raw_data)
doubled = double_list(clean)

🔹 Убрал goto и вложенные циклы
🔹 Читается сверху вниз

2. Functional Programming

Функции как математические выражения

❌ С побочными эффектами

results = []

def normalize(data):
    total = sum(data)
    for i in range(len(data)):
        data[i] /= total  # меняет оригинал!
    results.append(total)  # глобальное изменение
    return data

✅ Чистые функции

def normalize(data):
    total = sum(data)
    return [x / total for x in data], total

# Никаких side effects
normalized, total = normalize([1, 2, 3])

🔹 Один ввод → один вывод
🔹 Нет изменений внешнего мира

💡 Используется в ML

# map, filter, reduce
norm = list(map(lambda x: x / total, data))

# или через списковые включения
norm = [x / total for x in data]

Чистота помогает воспроизводимости

3. Object-Oriented Programming

Код как взаимодействие объектов

❌ Только функции

def user_create(name, email):
    return {'name': name, 'email': email}

def user_validate(user):
    return '@' in user['email']

def user_save(user, db):
    db.insert(user)

✅ ООП: инкапсуляция

class User:
    def __init__(self, name, email):
        self.name = name
        self.email = email

    def is_valid(self):
        return '@' in self.email

    def save(self, db):
        if self.is_valid():
            db.insert(self.__dict__)

🔹 Данные + поведение вместе

🎯 Когда какой парадигмой пользоваться?

Задача Парадигма
ETL, обработка данных Функциональная
Скрипт с шагами Структурная
API, сервисы, модели ООП