Сопоставьте императивный, декларативный и реактивный стили программирования: приведите по одному реальному примеру задачи и объясните, почему выбран стиль наиболее подходящ.
Императивный — пример и почему: - Пример: счётчик посещений в лог-файле: пройти по строкам файла, парсить IP и увеличивать счётчики в словаре (например, на Python: читать файл в цикле, обновлять структуру). - Почему: задача — последовательная изменяемая процедура с явным управлением состоянием (чётчики), удобнее выразить шаг за шагом (итерация, присвоения, ветвления). Императивный стиль даёт контроль производительности и побочных эффектов. Декларативный — пример и почему: - Пример: найти топ-10 пользователей по сумме заказов прямо в базе: `SELECT user_id, SUM(amount) AS total FROM orders GROUP BY user_id ORDER BY total DESC LIMIT 10`. - Почему: вы описываете желаемый результат, а система (SQL-движок) решает, как выполнить запрос (оптимизация, план). Для выборок, фильтраций и агрегаций декларативный подход чище и короче, не нужно описывать порядок операций. Реактивный — пример и почему: - Пример: автодополнение в поисковой строке (live search): каждое нажатие клавиши генерирует поток событий, применяются фильтры (debounce, distinct), выполняются асинхронные запросы и результат отображается; удобно реализуется через RxJS / Reactive Streams. - Почему: задача — управление временем и асинхронными событиями с потребностью в композиции потоков, отмене предыдущих запросов и управлении задержками; реактивный стиль моделирует данные как поток изменений и упрощает обработку таких сценариев.
- Пример: счётчик посещений в лог-файле: пройти по строкам файла, парсить IP и увеличивать счётчики в словаре (например, на Python: читать файл в цикле, обновлять структуру).
- Почему: задача — последовательная изменяемая процедура с явным управлением состоянием (чётчики), удобнее выразить шаг за шагом (итерация, присвоения, ветвления). Императивный стиль даёт контроль производительности и побочных эффектов.
Декларативный — пример и почему:
- Пример: найти топ-10 пользователей по сумме заказов прямо в базе: `SELECT user_id, SUM(amount) AS total FROM orders GROUP BY user_id ORDER BY total DESC LIMIT 10`.
- Почему: вы описываете желаемый результат, а система (SQL-движок) решает, как выполнить запрос (оптимизация, план). Для выборок, фильтраций и агрегаций декларативный подход чище и короче, не нужно описывать порядок операций.
Реактивный — пример и почему:
- Пример: автодополнение в поисковой строке (live search): каждое нажатие клавиши генерирует поток событий, применяются фильтры (debounce, distinct), выполняются асинхронные запросы и результат отображается; удобно реализуется через RxJS / Reactive Streams.
- Почему: задача — управление временем и асинхронными событиями с потребностью в композиции потоков, отмене предыдущих запросов и управлении задержками; реактивный стиль моделирует данные как поток изменений и упрощает обработку таких сценариев.