Use a single exit(false) for the whole case false of chain

Review decision: all five conditions share one action, so they share one
comma-separated value set with a single exit(false).

Aligns the article's Best Practice with the sample — it previously told
authors to keep side-effecting conditions in their own value set, which the
sample no longer does — and drops the now-contradictory wording about listing
the failure action per condition.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
António Silva 2026-08-25 14:52:44 +01:00
parent f7a00bf0b6
commit 580970ac12
2 changed files with 6 additions and 14 deletions

View file

@ -4,22 +4,14 @@ codeunit 50542 "Perf Sample CaseChain Good"
var
Item: Record Item;
begin
// 'case false of' matches the value sets in order and stops at the first
// match, so each value set is reached only when the previous one passed —
// and Item.Get is never called for a non-item line.
// 'case false of' matches the values in order and stops at the first match,
// so each condition is reached only when the previous one passed — and
// Item.Get is never called for a non-item line.
case false of
// Pure field reads with no side effects and no order dependency, so
// they share one value set and one action.
(SalesLine.Type = SalesLine.Type::Item),
(SalesLine."No." <> ''),
(SalesLine."Qty. to Ship" > 0):
exit(false);
// These two keep their own value sets even though the action repeats:
// ordering across separate value sets is what the documentation
// guarantees. The Get must not run until the checks above pass, and
// Blocked must not be read until the Get succeeded.
Item.Get(SalesLine."No."):
exit(false);
(SalesLine."Qty. to Ship" > 0),
Item.Get(SalesLine."No."),
(not Item.Blocked):
exit(false);
end;