UNPKG

bc-code-intelligence-mcp

Version:

BC Code Intelligence MCP Server - Complete Specialist Bundle with AI-driven expert consultation, seamless handoffs, and context-preserving workflows

100 lines (76 loc) 4.17 kB
--- title: "Boolean Expression Simplification in AL" domain: "roger-reviewer" difficulty: "intermediate" bc_versions: "14+" tags: ["boolean-expressions", "code-simplification", "readability", "performance", "refactoring"] prerequisites: ["al-syntax-basics", "conditional-logic"] samples: "samples/boolean-simplification-examples.md" --- # Boolean Expression Simplification in AL ## Overview Complex boolean expressions in AL code often become difficult to read, maintain, and debug. Systematic simplification techniques improve code clarity while maintaining logical correctness and often enhancing performance. **Core Principle**: Simplify boolean expressions to their most readable form while preserving exact logical behavior. ## Simplification Principles ### De Morgan's Laws Application Transform complex negations using logical equivalencies: - **NOT (A AND B) = (NOT A) OR (NOT B)** - **NOT (A OR B) = (NOT A) AND (NOT B)** These transformations often reveal simpler positive conditions that improve readability. ### Short-Circuit Evaluation Optimization AL evaluates boolean expressions left-to-right with short-circuiting: - **AND expressions**: Place most likely false conditions first - **OR expressions**: Place most likely true conditions first - **Performance impact**: Expensive operations should appear later in expression ### Positive Logic Preference Express conditions in positive terms when possible: - **Avoid double negatives**: Replace `not (not Condition)` with `Condition` - **Prefer positive checks**: Use `IsValid` instead of `not IsInvalid` - **Clear intent**: Positive expressions communicate intent more directly ## Common Simplification Patterns ### Redundant Condition Elimination ``` // Complex: Redundant conditions if (Status = Status::Active) and (Status <> Status::Inactive) then ``` **Simplification**: Remove redundant negative condition - if Status is Active, it cannot be Inactive. ### Range Condition Optimization ``` // Complex: Multiple range checks if (Amount >= 0) and (Amount <= MaxAmount) and (Amount <> 0) then ``` **Simplification**: Combine overlapping conditions and eliminate redundancy. ### Nested Condition Flattening ``` // Complex: Deep nesting if Condition1 then if Condition2 then if Condition3 then ProcessRecord(); ``` **Simplification**: Use combined boolean expression with early exit patterns. ## Refactoring Techniques ### Extract Boolean Variables Replace complex inline expressions with descriptive boolean variables: - **Improved readability**: Self-documenting variable names explain logic - **Easier debugging**: Individual conditions can be evaluated separately - **Maintainability**: Changes to logic isolated to variable assignment ### Method Extraction for Complex Logic Move complex boolean expressions into dedicated functions: - **Single responsibility**: Each function handles one logical concept - **Reusability**: Complex conditions can be reused across objects - **Testability**: Isolated boolean logic easier to unit test ### Conditional Inversion Sometimes inverting conditional logic simplifies overall expression: - **Guard clauses**: Use early returns to eliminate nesting - **Exception handling**: Check for invalid conditions first - **Default behavior**: Structure logic around normal case flow ## Performance Guidelines Order expressions strategically with expensive operations last, leverage short-circuit evaluation, and always check for null/empty conditions first. ## Readability Guidelines Use meaningful variable names, logical grouping with parentheses, and consistent team formatting standards for boolean expressions. ## Best Practices Use truth table analysis for complex expressions, recognize common AL patterns, and ensure behavioral testing preserves original logic during simplification. *Complete simplification examples: samples/boolean-simplification-examples.md* *AL performance patterns: roger-reviewer-index.json#performance-optimization* *Refactoring techniques: code-design-index.json#refactoring-patterns*