Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке розгалужений алгоритм?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Розгалужений алгоритм** - це алгоритм, у якому залежно від істинності умови обирається і виконується одна з альтернативних гілок дій. У коді реалізується конструкціями if/else, else if, switch і тернарним оператором ?:, при цьому необрані гілки пропускаються. **Ключове:** кожна точка розгалуження збільшує цикломатичну складність, тому глибокої вкладеності варто уникати.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## Коротка відповідь Розгалужений алгоритм - це алгоритм, у якому залежно від істинності умови обирається і виконується одна з альтернативних гілок дій. У коді реалізується конструкціями if/else, else if, switch і тернарним оператором ?:, при цьому необрані гілки пропускаються. ## Докладний розбір ### Визначення Розгалужений алгоритм містить точки прийняття рішень: виходячи з результату перевірки умов обирається одна з можливих гілок виконання. Найчастіше гілки взаємовиключні (if / else if / else). Можливі й незалежні перевірки (кілька if), коли можуть виконатися кілька гілок поспіль. ### Коли застосовується - Валідація і нормалізація вхідних даних - Вибір варіанту бізнес-логіки (різні тарифи, статуси, режими) - Обробка помилок і винятків, відновлення після помилок - Роутинг/навігація, вибір представлення на UI - Feature flags, A/B-тестування - Контроль доступу (ролі/дозволи) ### Базові форми розгалуження #### if / else ```javascript const age = 20; if (age >= 18) { console.log('Дорослий'); } else { console.log('Неповнолітній'); } ``` Обирається одна з двох гілок залежно від умови. #### else if (множинний вибір) ```javascript const score = 73; let grade; if (score >= 90) grade = 'A'; else if (score >= 75) grade = 'B'; else if (score >= 60) grade = 'C'; else grade = 'D'; // Виконується тільки перша відповідна гілка. ``` #### switch (вибір за значенням) ```javascript function access(role) { switch (role) { case 'admin': return 'Повний доступ'; case 'manager': return 'Обмежений доступ'; case 'user': return 'Базовий доступ'; default: return 'Гість'; } } // Важливо: не забувати default і уникати "провалювання" (fallthrough), якщо воно не потрібне. ``` #### Тернарний оператор (вираз) ```javascript const isMobile = window.innerWidth < 768; const layout = isMobile ? 'mobile' : 'desktop'; // Гарний для компактних присвоєнь, не зловживайте вкладеністю. ``` #### Ранні повернення (guard clauses) ```javascript function processOrder(order) { if (!order) return 'Немає замовлення'; if (!order.items?.length) return 'Порожнє замовлення'; if (order.canceled) return 'Замовлення скасовано'; // Основна логіка return 'ОК'; } // Зменшують вкладеність і підвищують читабельність. ``` ### Умови і логіка в JavaScript Порівняння: `===, !==, >, >=, <, <=`. Логіка: `&&, ||, !`. Коротке замикання дозволяє писати компактні перевірки. Falsy-значення (в умові вважаються хибними): false, 0, -0, 0n, "", null, undefined, NaN. Все інше - truthy. ### Типові помилки і best practices - Використовуйте строгі порівняння ===/!== замість ==/!=, щоб уникнути неочевидних приведень типів. - Не розміщуйте побічні ефекти в умовах; обчислюйте їх заздалегідь. - Уникайте глибокої вкладеності if - застосовуйте ранні повернення і виносьте логіку у функції/предикати. - У switch не забувайте default; використовуйте break або return, щоб виключити випадкове fallthrough. - Намагайтеся робити умови самодокументованими: виносьте складні перевірки у функції з зрозумілими іменами. - Якщо вибір залежить від значення ключа (наприклад, за роллю), замість довгого ланцюжка else if можна використовувати відображення: ```javascript const accessByRole = { admin: 'Повний доступ', manager: 'Обмежений доступ', user: 'Базовий доступ', default: 'Гість', }; const role = 'manager'; const access = accessByRole[role] ?? accessByRole.default; ``` ### Складність і тестування Кожна точка розгалуження збільшує цикломатичну складність. Тримайте функції короткими, розгалуження - пласкими. Забезпечуйте покриття тестами для кожної гілки: позитивні/негативні сценарії і граничні випадки. ### Невеликі приклади з веб-розробки 1) Валідація форми: ```javascript function validateSignup({ email, password }) { if (!email) return 'Введіть email'; if (!/\S+@\S+\.\S+/.test(email)) return 'Невірний email'; if (!password) return 'Введіть пароль'; if (password.length < 8) return 'Пароль занадто короткий'; return 'OK'; } ``` 2) Обробка відповіді сервера: ```javascript async function fetchUser(id) { if (!id) throw new Error('id обов\'язковий'); const res = await fetch(`/api/users/${id}`); if (!res.ok) { if (res.status === 404) return null; // гілка: користувача не знайдено throw new Error('Серверна помилка'); // гілка: інша помилка } return res.json(); // гілка: успіх } ``` ### Висновок Розгалужений алгоритм - базовий інструмент керування потоком виконання. Грамотне використання умов, правильний вибір конструкцій (if/else, switch, тернарний оператор), ранні повернення і покриття тестами роблять код передбачуваним, читабельним і стійким.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.