try / catch pattern. Each field throws a custom error with a clear message when
validation fails.
Infinity for division by zero — not an error. We use
throw to enforce our own rules.
We manually throw new Error() to create a custom error with a meaningful message
instead of silently returning a bad value.
try / catch with async/await. A 404 does not throw automatically — you
must check response.ok.
finally always runs — whether the try succeeded or catch
triggered. Use it for cleanup.
Think of it as a door that always closes behind you — pass or fail. Use it to clear inputs, reset loaders, and write audit logs.