Boolean logic in COBOL forms the foundation of decision-making and program control flow. It enables programs to evaluate conditions, make choices, and execute different code paths based on logical criteria. Understanding boolean logic is essential for writing effective, maintainable COBOL programs.
Key components of COBOL boolean logic include:
COBOL provides fundamental logical operators that enable complex decision-making based on multiple conditions.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667IDENTIFICATION DIVISION. PROGRAM-ID. BOOLEAN-LOGIC-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. 01 LOGICAL-TEST-DATA. 05 WS-AGE PIC 9(3) VALUE 25. 05 WS-INCOME PIC 9(8) VALUE 50000. 05 WS-CREDIT-SCORE PIC 9(3) VALUE 750. 05 WS-EMPLOYMENT-YEARS PIC 9(2) VALUE 3. 01 CONDITION-FLAGS. 05 WS-AGE-ELIGIBLE PIC X(1) VALUE 'N'. 88 WS-AGE-OK VALUE 'Y'. 88 WS-AGE-NOT-OK VALUE 'N'. 05 WS-INCOME-ELIGIBLE PIC X(1) VALUE 'N'. 88 WS-INCOME-OK VALUE 'Y'. 88 WS-INCOME-NOT-OK VALUE 'N'. 05 WS-CREDIT-ELIGIBLE PIC X(1) VALUE 'N'. 88 WS-CREDIT-OK VALUE 'Y'. 88 WS-CREDIT-NOT-OK VALUE 'N'. PROCEDURE DIVISION. DISPLAY "=== Boolean Logic Demonstration ===" PERFORM DEMONSTRATE-AND-OPERATOR PERFORM DEMONSTRATE-OR-OPERATOR PERFORM DEMONSTRATE-NOT-OPERATOR PERFORM DEMONSTRATE-COMPLEX-EXPRESSIONS STOP RUN. DEMONSTRATE-AND-OPERATOR. DISPLAY "=== AND Operator Demonstration ===" DISPLAY "Age: " WS-AGE DISPLAY "Income: " WS-INCOME DISPLAY "Credit Score: " WS-CREDIT-SCORE DISPLAY "Employment Years: " WS-EMPLOYMENT-YEARS * Test individual conditions IF WS-AGE >= 18 SET WS-AGE-OK TO TRUE DISPLAY "Age condition: PASS" ELSE SET WS-AGE-NOT-OK TO TRUE DISPLAY "Age condition: FAIL" END-IF IF WS-INCOME >= 30000 SET WS-INCOME-OK TO TRUE DISPLAY "Income condition: PASS" ELSE SET WS-INCOME-NOT-OK TO TRUE DISPLAY "Income condition: FAIL" END-IF IF WS-CREDIT-SCORE >= 700 SET WS-CREDIT-OK TO TRUE DISPLAY "Credit condition: PASS" ELSE SET WS-CREDIT-NOT-OK TO TRUE DISPLAY "Credit condition: FAIL" END-IF * Combined AND condition IF WS-AGE >= 18 AND WS-INCOME >= 30000 AND WS-CREDIT-SCORE >= 700 DISPLAY "Loan application: APPROVED (All conditions met)" ELSE DISPLAY "Loan application: DENIED (Not all conditions met)" END-IF.
12345678910111213141516DEMONSTRATE-OR-OPERATOR. DISPLAY "=== OR Operator Demonstration ===" * Test OR conditions for alternative eligibility IF WS-AGE >= 65 OR WS-INCOME >= 100000 OR WS-CREDIT-SCORE >= 800 DISPLAY "Premium loan program: ELIGIBLE (At least one condition met)" ELSE DISPLAY "Premium loan program: NOT ELIGIBLE (No conditions met)" END-IF * Multiple OR conditions IF WS-EMPLOYMENT-YEARS >= 5 OR WS-CREDIT-SCORE >= 750 OR WS-INCOME >= 75000 DISPLAY "Fast-track approval: AVAILABLE" ELSE DISPLAY "Fast-track approval: NOT AVAILABLE" END-IF.
12345678910111213141516171819202122DEMONSTRATE-NOT-OPERATOR. DISPLAY "=== NOT Operator Demonstration ===" * Test NOT conditions IF NOT (WS-AGE < 18) DISPLAY "Adult applicant: YES" ELSE DISPLAY "Adult applicant: NO" END-IF IF NOT (WS-CREDIT-SCORE < 600) DISPLAY "Good credit standing: YES" ELSE DISPLAY "Good credit standing: NO" END-IF * Complex NOT condition IF NOT (WS-INCOME < 20000 AND WS-CREDIT-SCORE < 500) DISPLAY "Not in high-risk category: YES" ELSE DISPLAY "Not in high-risk category: NO" END-IF.
Complex boolean expressions combine multiple logical operators and conditions to create sophisticated decision-making logic.
1234567891011121314151617181920212223242526272829303132DEMONSTRATE-COMPLEX-EXPRESSIONS. DISPLAY "=== Complex Boolean Expressions ===" * Complex expression with parentheses IF (WS-AGE >= 18 AND WS-INCOME >= 30000) OR (WS-CREDIT-SCORE >= 800 AND WS-EMPLOYMENT-YEARS >= 2) DISPLAY "Loan eligibility: APPROVED (Complex criteria met)" ELSE DISPLAY "Loan eligibility: DENIED (Complex criteria not met)" END-IF * Multiple levels of nesting IF WS-AGE >= 18 AND (WS-INCOME >= 50000 OR WS-CREDIT-SCORE >= 750) AND NOT (WS-CREDIT-SCORE < 500) DISPLAY "Premium loan: ELIGIBLE" ELSE DISPLAY "Premium loan: NOT ELIGIBLE" END-IF * Business logic with complex conditions IF (WS-AGE >= 25 AND WS-AGE <= 65) AND (WS-INCOME >= 40000 OR WS-CREDIT-SCORE >= 700) AND (WS-EMPLOYMENT-YEARS >= 1 OR WS-CREDIT-SCORE >= 800) DISPLAY "Standard loan: APPROVED" ELSE IF WS-AGE >= 18 AND WS-INCOME >= 20000 AND WS-CREDIT-SCORE >= 600 DISPLAY "Basic loan: APPROVED" ELSE DISPLAY "No loan products available" END-IF END-IF.
Condition names provide meaningful identifiers for specific conditions, making code more readable and maintainable.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475IDENTIFICATION DIVISION. PROGRAM-ID. CONDITION-NAMES-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. 01 CUSTOMER-DATA. 05 CUSTOMER-AGE PIC 9(3). 88 MINOR-AGE VALUE 0 THRU 17. 88 ADULT-AGE VALUE 18 THRU 64. 88 SENIOR-AGE VALUE 65 THRU 120. 05 CUSTOMER-INCOME PIC 9(8). 88 LOW-INCOME VALUE 0 THRU 29999. 88 MEDIUM-INCOME VALUE 30000 THRU 74999. 88 HIGH-INCOME VALUE 75000 THRU 999999. 05 CUSTOMER-CREDIT-SCORE PIC 9(3). 88 POOR-CREDIT VALUE 0 THRU 599. 88 FAIR-CREDIT VALUE 600 THRU 699. 88 GOOD-CREDIT VALUE 700 THRU 799. 88 EXCELLENT-CREDIT VALUE 800 THRU 850. 01 LOAN-DECISION. 05 LOAN-STATUS PIC X(10). 05 LOAN-AMOUNT PIC 9(8). 05 INTEREST-RATE PIC 9V99. PROCEDURE DIVISION. DISPLAY "=== Condition Names Demonstration ===" PERFORM INITIALIZE-CUSTOMER-DATA PERFORM EVALUATE-LOAN-ELIGIBILITY STOP RUN. INITIALIZE-CUSTOMER-DATA. MOVE 35 TO CUSTOMER-AGE MOVE 65000 TO CUSTOMER-INCOME MOVE 720 TO CUSTOMER-CREDIT-SCORE DISPLAY "Customer Age: " CUSTOMER-AGE DISPLAY "Customer Income: " CUSTOMER-INCOME DISPLAY "Customer Credit Score: " CUSTOMER-CREDIT-SCORE. EVALUATE-LOAN-ELIGIBILITY. DISPLAY "=== Loan Eligibility Evaluation ===" * Use condition names for clear logic IF ADULT-AGE AND MEDIUM-INCOME AND GOOD-CREDIT MOVE "APPROVED" TO LOAN-STATUS MOVE 50000 TO LOAN-AMOUNT MOVE 5.25 TO INTEREST-RATE DISPLAY "Loan Status: " LOAN-STATUS DISPLAY "Loan Amount: $" LOAN-AMOUNT DISPLAY "Interest Rate: " INTEREST-RATE "%" ELSE IF ADULT-AGE AND HIGH-INCOME AND EXCELLENT-CREDIT MOVE "APPROVED" TO LOAN-STATUS MOVE 100000 TO LOAN-AMOUNT MOVE 4.75 TO INTEREST-RATE DISPLAY "Premium Loan Status: " LOAN-STATUS DISPLAY "Premium Loan Amount: $" LOAN-AMOUNT DISPLAY "Premium Interest Rate: " INTEREST-RATE "%" ELSE IF ADULT-AGE AND (MEDIUM-INCOME OR HIGH-INCOME) AND FAIR-CREDIT MOVE "CONDITIONAL" TO LOAN-STATUS MOVE 25000 TO LOAN-AMOUNT MOVE 7.50 TO INTEREST-RATE DISPLAY "Conditional Loan Status: " LOAN-STATUS DISPLAY "Conditional Loan Amount: $" LOAN-AMOUNT DISPLAY "Conditional Interest Rate: " INTEREST-RATE "%" ELSE MOVE "DENIED" TO LOAN-STATUS DISPLAY "Loan Status: " LOAN-STATUS DISPLAY "Reason: Eligibility criteria not met" END-IF END-IF END-IF.
The EVALUATE statement provides a powerful way to handle complex boolean logic with multiple conditions and outcomes.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192IDENTIFICATION DIVISION. PROGRAM-ID. EVALUATE-STATEMENT-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. 01 BUSINESS-RULES. 05 CUSTOMER-TYPE PIC X(1). 88 INDIVIDUAL VALUE 'I'. 88 BUSINESS VALUE 'B'. 88 NON-PROFIT VALUE 'N'. 05 ACCOUNT-BALANCE PIC S9(8)V99. 88 ZERO-BALANCE VALUE 0. 88 LOW-BALANCE VALUE 0.01 THRU 999.99. 88 MEDIUM-BALANCE VALUE 1000.00 THRU 9999.99. 88 HIGH-BALANCE VALUE 10000.00 THRU 999999.99. 05 TRANSACTION-AMOUNT PIC S9(7)V99. 88 SMALL-TRANSACTION VALUE 0.01 THRU 99.99. 88 MEDIUM-TRANSACTION VALUE 100.00 THRU 999.99. 88 LARGE-TRANSACTION VALUE 1000.00 THRU 99999.99. 01 PROCESSING-RESULTS. 05 PROCESSING-FEE PIC S9(3)V99. 05 PROCESSING-TIME PIC 9(2). 05 APPROVAL-REQUIRED PIC X(1). 88 APPROVAL-NEEDED VALUE 'Y'. 88 NO-APPROVAL-NEEDED VALUE 'N'. PROCEDURE DIVISION. DISPLAY "=== EVALUATE Statement Demonstration ===" PERFORM INITIALIZE-BUSINESS-DATA PERFORM PROCESS-TRANSACTION-WITH-EVALUATE STOP RUN. INITIALIZE-BUSINESS-DATA. MOVE 'I' TO CUSTOMER-TYPE MOVE 5000.00 TO ACCOUNT-BALANCE MOVE 250.00 TO TRANSACTION-AMOUNT DISPLAY "Customer Type: " CUSTOMER-TYPE DISPLAY "Account Balance: $" ACCOUNT-BALANCE DISPLAY "Transaction Amount: $" TRANSACTION-AMOUNT. PROCESS-TRANSACTION-WITH-EVALUATE. DISPLAY "=== Processing Transaction with EVALUATE ===" EVALUATE TRUE WHEN INDIVIDUAL AND HIGH-BALANCE AND SMALL-TRANSACTION MOVE 0.00 TO PROCESSING-FEE MOVE 1 TO PROCESSING-TIME SET NO-APPROVAL-NEEDED TO TRUE DISPLAY "Processing: Individual, High Balance, Small Transaction" DISPLAY "Fee: $" PROCESSING-FEE DISPLAY "Time: " PROCESSING-TIME " minutes" DISPLAY "Approval Required: " APPROVAL-REQUIRED WHEN INDIVIDUAL AND MEDIUM-BALANCE AND MEDIUM-TRANSACTION MOVE 2.50 TO PROCESSING-FEE MOVE 5 TO PROCESSING-TIME SET NO-APPROVAL-NEEDED TO TRUE DISPLAY "Processing: Individual, Medium Balance, Medium Transaction" DISPLAY "Fee: $" PROCESSING-FEE DISPLAY "Time: " PROCESSING-TIME " minutes" DISPLAY "Approval Required: " APPROVAL-REQUIRED WHEN BUSINESS AND HIGH-BALANCE AND LARGE-TRANSACTION MOVE 5.00 TO PROCESSING-FEE MOVE 15 TO PROCESSING-TIME SET APPROVAL-NEEDED TO TRUE DISPLAY "Processing: Business, High Balance, Large Transaction" DISPLAY "Fee: $" PROCESSING-FEE DISPLAY "Time: " PROCESSING-TIME " minutes" DISPLAY "Approval Required: " APPROVAL-REQUIRED WHEN NON-PROFIT AND MEDIUM-BALANCE MOVE 0.00 TO PROCESSING-FEE MOVE 3 TO PROCESSING-TIME SET NO-APPROVAL-NEEDED TO TRUE DISPLAY "Processing: Non-Profit, Medium Balance" DISPLAY "Fee: $" PROCESSING-FEE DISPLAY "Time: " PROCESSING-TIME " minutes" DISPLAY "Approval Required: " APPROVAL-REQUIRED WHEN OTHER MOVE 10.00 TO PROCESSING-FEE MOVE 30 TO PROCESSING-TIME SET APPROVAL-NEEDED TO TRUE DISPLAY "Processing: Special Case" DISPLAY "Fee: $" PROCESSING-FEE DISPLAY "Time: " PROCESSING-TIME " minutes" DISPLAY "Approval Required: " APPROVAL-REQUIRED END-EVALUATE.
Optimizing boolean logic performance involves structuring conditions for efficient evaluation and minimal processing overhead.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374IDENTIFICATION DIVISION. PROGRAM-ID. BOOLEAN-PERFORMANCE-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. 01 PERFORMANCE-TEST-DATA. 05 WS-TEST-VALUE-1 PIC X(10) VALUE "TEST1". 05 WS-TEST-VALUE-2 PIC X(10) VALUE "TEST2". 05 WS-TEST-VALUE-3 PIC X(10) VALUE "TEST3". 05 WS-NUMERIC-VALUE PIC 9(5) VALUE 1000. 01 PERFORMANCE-METRICS. 05 WS-EVALUATION-COUNT PIC 9(6) VALUE ZERO. 05 WS-START-TIME PIC 9(14). 05 WS-END-TIME PIC 9(14). 05 WS-PROCESSING-TIME PIC 9(6). PROCEDURE DIVISION. DISPLAY "=== Boolean Logic Performance Demo ===" PERFORM DEMONSTRATE-SHORT-CIRCUIT-EVALUATION PERFORM DEMONSTRATE-CONDITION-ORDERING PERFORM DEMONSTRATE-PERFORMANCE-OPTIMIZATION STOP RUN. DEMONSTRATE-SHORT-CIRCUIT-EVALUATION. DISPLAY "=== Short-Circuit Evaluation ===" * Demonstrate short-circuit evaluation IF WS-TEST-VALUE-1 = "TEST1" AND WS-TEST-VALUE-2 = "TEST2" AND WS-TEST-VALUE-3 = "TEST3" DISPLAY "All conditions evaluated: TRUE" ELSE DISPLAY "Short-circuit occurred: FALSE" END-IF * Test short-circuit with false condition first IF WS-TEST-VALUE-1 = "WRONG" AND WS-TEST-VALUE-2 = "TEST2" AND WS-TEST-VALUE-3 = "TEST3" DISPLAY "This should not execute" ELSE DISPLAY "Short-circuit prevented unnecessary evaluation" END-IF. DEMONSTRATE-CONDITION-ORDERING. DISPLAY "=== Condition Ordering Optimization ===" * Order conditions by frequency/likelihood IF WS-NUMERIC-VALUE > 0 AND WS-NUMERIC-VALUE < 10000 AND WS-NUMERIC-VALUE MOD 2 = 0 DISPLAY "Optimized condition order: TRUE" ELSE DISPLAY "Optimized condition order: FALSE" END-IF. DEMONSTRATE-PERFORMANCE-OPTIMIZATION. DISPLAY "=== Performance Optimization ===" ACCEPT WS-START-TIME FROM DATE YYYYMMDD ACCEPT WS-START-TIME(9:6) FROM TIME * Performance test with optimized conditions PERFORM VARYING WS-EVALUATION-COUNT FROM 1 BY 1 UNTIL WS-EVALUATION-COUNT > 100000 * Use most likely conditions first IF WS-NUMERIC-VALUE > 0 AND WS-NUMERIC-VALUE < 10000 AND WS-NUMERIC-VALUE MOD 2 = 0 CONTINUE END-IF END-PERFORM ACCEPT WS-END-TIME FROM DATE YYYYMMDD ACCEPT WS-END-TIME(9:6) FROM TIME COMPUTE WS-PROCESSING-TIME = WS-END-TIME - WS-START-TIME DISPLAY "Performance test completed" DISPLAY "Evaluations: " WS-EVALUATION-COUNT DISPLAY "Processing time: " WS-PROCESSING-TIME " milliseconds".
Following best practices ensures clear, efficient, and maintainable boolean logic in COBOL programs.
Boolean logic in COBOL refers to the logical operations and condition testing used for decision making in programs. It includes logical operators like AND, OR, NOT, and complex condition expressions that evaluate to true or false values.
COBOL provides several logical operators: AND (logical AND), OR (logical OR), NOT (logical NOT), and complex combinations. These operators are used in IF statements, EVALUATE statements, and condition expressions to make decisions based on multiple criteria.
Complex boolean expressions in COBOL use parentheses for grouping, multiple logical operators, and can combine relational operators with logical operators. Examples include (A > B) AND (C < D) OR (E = F) for sophisticated decision making.
Condition names in COBOL are 88-level data items that define specific values or ranges for a variable. They provide meaningful names for conditions and make code more readable, such as defining HIGH-VALUE, LOW-VALUE, or specific business conditions.
Boolean logic performance optimization includes using short-circuit evaluation, ordering conditions by frequency, using appropriate data types, minimizing complex expressions, and structuring conditions for optimal execution paths.