Модуль 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 tablefor / whileTerminationBoundary retest

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

InputExact reproducible case.
Expected/actualObservable difference.
LocalizeLine, breakpoint, scope, stack.
HypothesisОдна testable cause.
FixМінімальна зміна.
RetestOriginal, empty, boundary, invalid.

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.

Завантажити JavaScript basics lab →

Офіційні джерела

Практична перевірка · урок 32 з 60

Закріпіть матеріал уроку

Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.

1. Навіщо decision table перед if?
2. Чому invalid input branch має бути рано?
3. Коли switch доречний?