Види програмування: функціональне, логічне, подійно-орієнтоване, реактивне, узагальнене

Розділ: Основи мов програмування

📌 Про що ця тема


Тут перевіряють розуміння того, що програмувати можна по-різному: існують різні парадигми (підходи, стилі) програмування. Ключове поняття — ПАРАДИГМА: сукупність ідей і принципів, що визначають, як будувати програму. Треба вміти впізнати парадигму за її ознаками й навести приклад застосування.


📖 Головне


• Парадигма — це спосіб мислення й організації коду, а не конкретна мова. Одна мова часто підтримує кілька парадигм (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 — обчислення через функції-перетворення, без зміни стану, незмінні дані.

Перевірити себе на практиці

Прочитати — половина справи. Далі потрібні завдання цієї ж теми з розбором кожної відповіді: саме на них видно, чи справді тема закрита.