bcquality/microsoft/knowledge/style/no-else-after-terminating-statement.md
Jesper Schulz-Wedde 2b5550c346
Some checks failed
Validate knowledge index / validate-index (push) Has been cancelled
Validate AL review fixtures / validate-review-fixtures (push) Has been cancelled
Validate frontmatter and structure / validate (push) Has been cancelled
Improve partner onboarding and documentation navigation (#174)
Lead with a complete plugin quick start and add task-oriented usage, troubleshooting, customization, and contribution guides. Preserve the broader plugin framing, correct conflicting contract guidance, support Agents folder reviews, and align repository validation. Convert existing sample references to clickable links without changing knowledge rules.

Co-authored-by: Jesper Schulz-Wedde <jesper.schulzwedde@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-09-09 17:31:03 +02:00

1.6 KiB

bc-version domain keywords technologies countries application-area
all
style
else
exit
break
skip
quit
error
terminating
control-flow
al
w1
all

Omit else when the then branch ends with exit, break, skip, quit, or error

Description

When the then branch of an if ends in a terminating statement — exit, break, skip, quit, or error — the else branch becomes the natural fall-through. if Cond then exit; DoX(); and if Cond then exit else DoX(); are equivalent, and the second form adds a layer of nesting that the reader has to mentally flatten. The same applies to Error(...): if IsAdjmtBinCodeChanged() then Error(AdjmtErr) else Error(BinErr); is better written as if IsAdjmtBinCodeChanged() then Error(AdjmtErr); Error(BinErr); — the second Error is always reached when the first branch is not taken.

Best Practice

Drop the else when the then branch unconditionally exits the procedure or the enclosing loop. The body that would have been inside else becomes the unindented continuation.

See sample: no-else-after-terminating-statement.good.al.

Anti Pattern

An if … then Error(…) else Error(…) pair where both branches terminate. The else is structural noise — the reader cannot tell at a glance whether it exists to handle an actual continuation or simply mirrors the then. The fix is to drop else and let the second Error fall through naturally.

See sample: no-else-after-terminating-statement.bad.al.