COBOL WHEN Clause
The WHEN clause is used in EVALUATE statements for conditional execution.
Overview
The WHEN clause provides a structured way to handle multiple conditional branches within EVALUATE statements. It allows you to specify different conditions and the corresponding code that should be executed when each condition is met.
This approach is more readable and maintainable than nested IF statements, especially when dealing with multiple possible conditions or values.
Syntax
12345678EVALUATE subject WHEN condition-1 statements-1 WHEN condition-2 statements-2 WHEN OTHER statements-3 END-EVALUATE
Basic syntax for the WHEN clause within an EVALUATE statement. The subject is evaluated against each WHEN condition, and the corresponding statements are executed when a match is found.
Parameters
- subject: The value or expression to be evaluated
- condition-1, condition-2: Specific conditions to test against
- statements-1, statements-2: Code to execute when conditions match
- WHEN OTHER: Optional catch-all for unmatched conditions
Practical Examples
Example 1: Basic Value Evaluation
1234567891011121314151617181920212223242526272829303132IDENTIFICATION DIVISION. PROGRAM-ID. WHEN-EXAMPLE. DATA DIVISION. WORKING-STORAGE SECTION. 01 USER-CHOICE PIC 9(1). 01 MESSAGE-TEXT PIC X(50). PROCEDURE DIVISION. MAIN-PROCESS. DISPLAY "Enter your choice (1-4): " ACCEPT USER-CHOICE EVALUATE USER-CHOICE WHEN 1 MOVE "You selected Option 1" TO MESSAGE-TEXT DISPLAY MESSAGE-TEXT WHEN 2 MOVE "You selected Option 2" TO MESSAGE-TEXT DISPLAY MESSAGE-TEXT WHEN 3 MOVE "You selected Option 3" TO MESSAGE-TEXT DISPLAY MESSAGE-TEXT WHEN 4 MOVE "You selected Option 4" TO MESSAGE-TEXT DISPLAY MESSAGE-TEXT WHEN OTHER MOVE "Invalid choice entered" TO MESSAGE-TEXT DISPLAY MESSAGE-TEXT END-EVALUATE STOP RUN.
This example demonstrates basic value evaluation using WHEN clauses. The program evaluates the user's choice and displays an appropriate message based on the selected option. The WHEN OTHER clause handles any invalid input.
Example 2: File Status Handling
1234567891011121314151617181920212223242526272829303132333435IDENTIFICATION DIVISION. PROGRAM-ID. FILE-STATUS-HANDLER. DATA DIVISION. WORKING-STORAGE SECTION. 01 FILE-STATUS PIC X(2). 01 STATUS-MESSAGE PIC X(100). PROCEDURE DIVISION. HANDLE-FILE-STATUS. * Simulate different file status codes MOVE "00" TO FILE-STATUS EVALUATE FILE-STATUS WHEN "00" MOVE "File operation successful" TO STATUS-MESSAGE DISPLAY STATUS-MESSAGE WHEN "10" MOVE "End of file reached" TO STATUS-MESSAGE DISPLAY STATUS-MESSAGE WHEN "22" MOVE "Duplicate key error" TO STATUS-MESSAGE DISPLAY STATUS-MESSAGE WHEN "23" MOVE "Record not found" TO STATUS-MESSAGE DISPLAY STATUS-MESSAGE WHEN "30" MOVE "Permanent error occurred" TO STATUS-MESSAGE DISPLAY STATUS-MESSAGE WHEN OTHER MOVE "Unknown file status code" TO STATUS-MESSAGE DISPLAY STATUS-MESSAGE END-EVALUATE STOP RUN.
This example shows how WHEN clauses can be used to handle different file status codes. Each status code has its own handling logic, making the code more organized and easier to maintain than multiple IF statements.
Example 3: Data Type Processing
1234567891011121314151617181920212223242526272829303132333435363738394041IDENTIFICATION DIVISION. PROGRAM-ID. DATA-TYPE-PROCESSOR. DATA DIVISION. WORKING-STORAGE SECTION. 01 DATA-TYPE PIC X(1). 01 PROCESSING-RESULT PIC X(50). PROCEDURE DIVISION. PROCESS-DATA. * Simulate different data types MOVE "N" TO DATA-TYPE EVALUATE DATA-TYPE WHEN "A" MOVE "Processing alphabetic data" TO PROCESSING-RESULT DISPLAY PROCESSING-RESULT PERFORM PROCESS-ALPHABETIC WHEN "N" MOVE "Processing numeric data" TO PROCESSING-RESULT DISPLAY PROCESSING-RESULT PERFORM PROCESS-NUMERIC WHEN "X" MOVE "Processing alphanumeric data" TO PROCESSING-RESULT DISPLAY PROCESSING-RESULT PERFORM PROCESS-ALPHANUMERIC WHEN OTHER MOVE "Unknown data type" TO PROCESSING-RESULT DISPLAY PROCESSING-RESULT END-EVALUATE STOP RUN. PROCESS-ALPHABETIC. DISPLAY "Alphabetic processing complete". PROCESS-NUMERIC. DISPLAY "Numeric processing complete". PROCESS-ALPHANUMERIC. DISPLAY "Alphanumeric processing complete".
This example demonstrates processing different data types using WHEN clauses. Each data type has its own processing routine, and the EVALUATE statement provides a clean way to route to the appropriate processing logic.
Example 4: Range Evaluation
1234567891011121314151617181920212223242526272829303132IDENTIFICATION DIVISION. PROGRAM-ID. RANGE-EVALUATOR. DATA DIVISION. WORKING-STORAGE SECTION. 01 SCORE PIC 9(3). 01 GRADE PIC X(1). PROCEDURE DIVISION. EVALUATE-SCORE. DISPLAY "Enter test score (0-100): " ACCEPT SCORE EVALUATE TRUE WHEN SCORE >= 90 MOVE "A" TO GRADE DISPLAY "Grade: A (Excellent)" WHEN SCORE >= 80 MOVE "B" TO GRADE DISPLAY "Grade: B (Good)" WHEN SCORE >= 70 MOVE "C" TO GRADE DISPLAY "Grade: C (Average)" WHEN SCORE >= 60 MOVE "D" TO GRADE DISPLAY "Grade: D (Below Average)" WHEN OTHER MOVE "F" TO GRADE DISPLAY "Grade: F (Failing)" END-EVALUATE STOP RUN.
This example shows how WHEN clauses can be used with EVALUATE TRUE to handle range conditions. The program evaluates a test score and assigns an appropriate grade based on the score range.
Best Practices and Considerations
Best Practices
- Always include a WHEN OTHER clause for unexpected values
- Order WHEN clauses from most specific to least specific
- Use meaningful condition names and descriptions
- Keep WHEN clause code blocks concise and focused
- Test all possible conditions thoroughly
Considerations
- Performance implications of multiple WHEN clauses
- Maintainability of complex conditional logic
- Error handling and recovery procedures
- Code readability and documentation
- Testing coverage for all conditions
Test Your Knowledge
1. What is the primary purpose of the WHEN clause in COBOL?
- To define file operations
- To specify conditions in EVALUATE statements
- To control program flow
- To handle errors
2. In which statement is the WHEN clause most commonly used?
- IF statement
- EVALUATE statement
- PERFORM statement
- READ statement
3. What is the relationship between WHEN and EVALUATE?
- They are unrelated
- WHEN is used within EVALUATE to define conditions
- EVALUATE is used within WHEN
- They are the same thing
4. What are the main components of a WHEN clause?
- Only the condition
- Condition and the code to execute
- Only the code to execute
- Only the WHEN keyword
5. When should you use the WHEN clause?
- Only for simple conditions
- For multiple conditional branches in EVALUATE statements
- Only for error handling
- Only for file operations