Check divisors before division so invalid input has a predictable result.

safe alternative When failure is expected for some inputs, make the invalid case a visible branch with a stable fallback value.

Safe Division

divisor
safe_division.lua
Replay: real traced execution (multi-file project)
local divisor = 2
local ok = divisor ~= 0
local display = "undefined"

if ok then
  display = tostring(12 / divisor)
end

print("divisor=" .. divisor)
print("ok=" .. tostring(ok))
print("display=" .. display)
local divisor = 0
local ok = divisor ~= 0
local display = "undefined"

if ok then
  display = tostring(12 / divisor)
end

print("divisor=" .. divisor)
print("ok=" .. tostring(ok))
print("display=" .. display)
local divisor = 4
local ok = divisor ~= 0
local display = "undefined"

if ok then
  display = tostring(12 / divisor)
end

print("divisor=" .. divisor)
print("ok=" .. tostring(ok))
print("display=" .. display)
  1. divisor ← 2, ok ← true, display ← undefined

    1local divisor→ 2 = 2 --@divisor=0, 42local ok→ true = divisor2 ~= 03local display→ undefined = "undefined"
  2. display ← 6.0

    5if oktrue then6  display→ 6.0 = tostring(12 / divisor2)7end
  3. print("divisor=" .. divisor)

    9print("divisor=" .. divisor2)10print("ok=" .. tostring(oktrue))11print("display=" .. display6.0)
    outputdivisor=2
    ok=true
    display=6.0
  1. divisor ← 0, ok ← false, display ← undefined

    1local divisor→ 0 = 02local ok→ false = divisor0 ~= 03local display→ undefined = "undefined"45if ok then6  display = tostring(12 / divisor)7end89print("divisor=" .. divisor0)10print("ok=" .. tostring(okfalse))11print("display=" .. displayundefined)
    outputdivisor=0
    ok=false
    display=undefined
  1. divisor ← 4, ok ← true, display ← undefined

    1local divisor→ 4 = 42local ok→ true = divisor4 ~= 03local display→ undefined = "undefined"
  2. display ← 3.0

    5if oktrue then6  display→ 3.0 = tostring(12 / divisor4)7end
  3. print("divisor=" .. divisor)

    9print("divisor=" .. divisor4)10print("ok=" .. tostring(oktrue))11print("display=" .. display3.0)
    outputdivisor=4
    ok=true
    display=3.0