MainframeMaster

COBOL Tutorial

COBOL Boolean Logic

Progress0 of 0 lessons

Introduction to Boolean Logic in COBOL

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:

  • Logical Operators: AND, OR, NOT for combining conditions
  • Relational Operators: =, <, >, <=, >=, NOT = for comparisons
  • Condition Names: Meaningful names for specific conditions
  • Complex Expressions: Nested logical operations
  • Short-Circuit Evaluation: Efficient condition processing

Basic Logical Operators

COBOL provides fundamental logical operators that enable complex decision-making based on multiple conditions.

AND Operator

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
IDENTIFICATION 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.

OR Operator

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DEMONSTRATE-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.

NOT Operator

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
DEMONSTRATE-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

Complex boolean expressions combine multiple logical operators and conditions to create sophisticated decision-making logic.

Nested Logical Operations

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
DEMONSTRATE-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 and Meaningful Logic

Condition names provide meaningful identifiers for specific conditions, making code more readable and maintainable.

Using Condition Names

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
IDENTIFICATION 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.

EVALUATE Statement for Complex Logic

The EVALUATE statement provides a powerful way to handle complex boolean logic with multiple conditions and outcomes.

EVALUATE Statement Implementation

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
IDENTIFICATION 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.

Performance Optimization of Boolean Logic

Optimizing boolean logic performance involves structuring conditions for efficient evaluation and minimal processing overhead.

Short-Circuit Evaluation

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
IDENTIFICATION 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".

Best Practices for Boolean Logic

Following best practices ensures clear, efficient, and maintainable boolean logic in COBOL programs.

Design Principles

  • Use condition names for meaningful, readable code
  • Order conditions by frequency or likelihood
  • Use parentheses to clarify complex expressions
  • Avoid deeply nested conditions when possible
  • Consider using EVALUATE for complex decision trees

Performance Guidelines

  • Leverage short-circuit evaluation for efficiency
  • Place most likely conditions first
  • Minimize complex nested expressions
  • Use appropriate data types for comparisons
  • Profile performance-critical boolean logic

Maintenance Considerations

  • Document complex boolean logic clearly
  • Use consistent naming conventions
  • Test all logical paths thoroughly
  • Keep conditions simple and focused
  • Regular review and refactoring of complex logic

FAQ

What is boolean logic in COBOL?

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.

What are the logical operators in COBOL?

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.

How do you use complex boolean expressions in COBOL?

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.

What are condition names in COBOL?

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.

How do you optimize boolean logic performance in COBOL?

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.