Модуль 8 · Урок 32
Conditions, loops і controlled debugging
Control flow має бути доведений таблицею cases і termination, а не «ніби працює». Кожна branch отримує non-overlapping condition; кожен loop — initialization, continuation, progress і finite stop; кожний fix — original reproduction плюс boundary regression.
Decision table перед syntax
if (!Number.isFinite(total) || total <= 0) {
console.error('Invalid progress');
} else if (read >= total) {
console.log('complete');
} else if (read > 0) {
console.log('reading');
} else {
console.log('planned');
}Order важливий: invalid data відсікається до business branches. switch зручний для discrete exact cases; break запобігає accidental fall-through, якщо grouping cases не заплановано явно.
Loop із termination proof
for (let day = 1; day <= 5; day += 1) {
const projected = Math.min(read + day * 10, total);
console.log(day, projected);
}Initialization: day=1. Continuation: day≤5. Progress: +1. Stop: після day=5 condition false. while доречний, коли iteration count визначає evolving condition; progress step має виконуватися на кожному reachable path. continue не повинен пропускати цей step і створювати endless loop.
Debugging record
Console logging корисний лише коли прив’язаний до гіпотези. Breakpoint з watch показує values до failure без зміни timing через додатковий code.
Лабораторна
Пройдіть decision table, loop trace і boundary tests для synthetic progress. Acceptance: controlled invalid results, finite loops, no unexplained Console messages, no DOM/network/storage/dependencies.
Офіційні джерела
Закріпіть матеріал уроку
Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.