Види програмування: функціональне, логічне, подійно-орієнтоване, реактивне, узагальнене
Розділ: Основи мов програмування
📌 Про що ця тема
Тут перевіряють розуміння того, що програмувати можна по-різному: існують різні парадигми (підходи, стилі) програмування. Ключове поняття — ПАРАДИГМА: сукупність ідей і принципів, що визначають, як будувати програму. Треба вміти впізнати парадигму за її ознаками й навести приклад застосування.
📖 Головне
• Парадигма — це спосіб мислення й організації коду, а не конкретна мова. Одна мова часто підтримує кілька парадигм (Python, JavaScript, C#).
• Функціональне програмування: програма — це набір функцій, що перетворюють дані. Головне — обчислення значень, а не зміна стану. Уникають змінних, що змінюються (використовують незмінні дані). Функція завжди дає той самий результат за тих самих аргументів. Приклади мов: Haskell, частково Python, JavaScript.
• Логічне програмування: описуємо ФАКТИ й ПРАВИЛА, а програма сама шукає відповідь (виводить нові факти). Програміст каже «що відомо» і «що треба знайти», а не «як рахувати». Класична мова — Prolog.
• Подійно-орієнтоване (event-driven): хід програми визначають ПОДІЇ — натискання кнопки, клік, рух миші, надходження повідомлення. Для кожної події пишуть обробник (функцію). Основа графічних інтерфейсів і вебсторінок (JavaScript у браузері).
• Реактивне програмування: програма автоматично РЕАГУЄ на зміну даних (потоків даних). Якщо зміниться вхідне значення — залежні значення перераховуються самі. Приклад ідеї: формула в Excel оновлюється, коли змінюєш клітинку.
• Узагальнене (generic) програмування: пишемо алгоритм чи структуру один раз так, щоб він працював з РІЗНИМИ типами даних. Тип задається як параметр (шаблони в C++, generics у Java/C#). Мета — уникнути дублювання коду.
🔢 Як це працює на прикладі
Задача: знайти суму елементів списку.
• Функціональний підхід: застосовуємо готову функцію згортки, напр. sum([1,2,3]) = 6 — просто перетворення даних у значення, без циклів і змінних-лічильників.
• Подійно-орієнтований підхід у браузері: кнопці призначають обробник — коли користувач натискає, викликається функція, що показує суму. Код «спить», поки не станеться подія click.
• Узагальнений підхід: описуємо функцію max(a, b), що порівнює ДВА значення будь-якого типу — і числа, і рядки — один раз для всіх типів.
⚠️ Типові помилки
• Плутають парадигму з мовою: кажуть «JavaScript — подійна мова», хоча це мова, яка ПІДТРИМУЄ подійну парадигму серед інших.
• Плутають логічне й функціональне: у логічному описують факти/правила (Prolog), у функціональному — функції-перетворення.
• Плутають подійне й реактивне: подійне реагує на дії користувача (клік), реактивне — на зміну ПОТОКІВ ДАНИХ автоматично.
• Думають, що узагальнене — це про швидкість; насправді воно про роботу з різними типами й уникнення дублювання.
• Вважають, що мова належить лише одній парадигмі — більшість сучасних мов мультипарадигмові.
🎯 Що завчити напамʼять
• Функціональне → функції й незмінні дані (Haskell, Prolog — ні!).
• Логічне → факти + правила, система сама виводить (Prolog).
• Подійно-орієнтоване → події та обробники (GUI, браузер).
• Реактивне → автоматична реакція на зміну даних (аналогія Excel).
• Узагальнене → один код для різних типів (шаблони, generics).
🧠 Перевір себе
1. Яка парадигма будується на фактах і правилах?
2. Чим подійне програмування відрізняється від реактивного?
3. Для чого потрібне узагальнене програмування?
4. Назви головну ідею функціонального програмування.
Відповіді: 1 — логічне (Prolog); 2 — подійне реагує на події-дії (клік, натискання), реактивне автоматично перераховує значення при зміні даних; 3 — щоб один алгоритм/структура працювали з різними типами даних без дублювання коду; 4 — обчислення через функції-перетворення, без зміни стану, незмінні дані.