The FUNCTION-ID clause is used in COBOL to define functions that can accept parameters and return values. This clause enables functional programming capabilities in COBOL, allowing for modular, reusable code components.
Functions have a defined structure with parameters, return values, and logic.
The FUNCTION-ID clause follows specific syntax patterns for defining functions with parameters and return values.
123456789101112131415161718192021222324252627282930313233343536373839* Basic FUNCTION-ID clause syntax FUNCTION-ID function-name [USING parameter1, parameter2, ...] [RETURNING result-data-name] [ENVIRONMENT DIVISION] [DATA DIVISION] [PROCEDURE DIVISION] END FUNCTION function-name. * Examples FUNCTION-ID ADD-NUMBERS USING PARAM1 PARAM2 RETURNING RESULT. FUNCTION-ID CALCULATE-TOTAL USING AMOUNT TAX-RATE RETURNING TOTAL-AMOUNT. FUNCTION-ID VALIDATE-DATE USING DATE-STRING RETURNING IS-VALID. * Complete example FUNCTION-ID CALCULATE-INTEREST USING PRINCIPAL-AMOUNT INTEREST-RATE YEARS RETURNING INTEREST-AMOUNT. DATA DIVISION. LINKAGE SECTION. 01 PRINCIPAL-AMOUNT PIC 9(8)V99. 01 INTEREST-RATE PIC 9(3)V99. 01 YEARS PIC 9(2). 01 INTEREST-AMOUNT PIC 9(8)V99. PROCEDURE DIVISION USING PRINCIPAL-AMOUNT INTEREST-RATE YEARS RETURNING INTEREST-AMOUNT. COMPUTE INTEREST-AMOUNT = PRINCIPAL-AMOUNT * INTEREST-RATE * YEARS GOBACK. END FUNCTION CALCULATE-INTEREST.
FUNCTION-ID defines the function name and characteristics.
Clause | Purpose | Example |
---|---|---|
USING | Define input parameters | USING PARAM1 PARAM2 |
RETURNING | Define return value | RETURNING RESULT |
LINKAGE SECTION | Define parameter data types | 01 PARAM1 PIC 9(5) |
PROCEDURE DIVISION | Define function logic | Function implementation |
1234567891011121314151617* Calling functions FUNCTION function-name(parameter1, parameter2, ...) * Examples FUNCTION ADD-NUMBERS(100, 200) COMPUTE RESULT = FUNCTION CALCULATE-TOTAL(AMOUNT, TAX-RATE) IF FUNCTION VALIDATE-DATE(DATE-STRING) = 'Y' DISPLAY 'Valid date' END-IF * Using in expressions COMPUTE TOTAL = FUNCTION ADD-NUMBERS(A, B) + FUNCTION ADD-NUMBERS(C, D) * Storing function result MOVE FUNCTION CALCULATE-INTEREST(PRINCIPAL, RATE, YEARS) TO INTEREST
Functions are called using the FUNCTION keyword with parameters.
FUNCTION-ID is commonly used in specific scenarios where modular, reusable code components are needed.
1234567891011121314151617181920* Mathematical function example FUNCTION-ID CALCULATE-AREA USING LENGTH WIDTH RETURNING AREA. DATA DIVISION. LINKAGE SECTION. 01 LENGTH PIC 9(5)V99. 01 WIDTH PIC 9(5)V99. 01 AREA PIC 9(8)V99. PROCEDURE DIVISION USING LENGTH WIDTH RETURNING AREA. COMPUTE AREA = LENGTH * WIDTH GOBACK. END FUNCTION CALCULATE-AREA. * Usage COMPUTE RECTANGLE-AREA = FUNCTION CALCULATE-AREA(10.5, 5.2) DISPLAY 'Area: ' RECTANGLE-AREA
Functions are ideal for mathematical calculations and formulas.
1234567891011121314151617181920212223242526* Data validation function FUNCTION-ID VALIDATE-EMAIL USING EMAIL-ADDRESS RETURNING IS-VALID. DATA DIVISION. LINKAGE SECTION. 01 EMAIL-ADDRESS PIC X(50). 01 IS-VALID PIC X. PROCEDURE DIVISION USING EMAIL-ADDRESS RETURNING IS-VALID. IF EMAIL-ADDRESS CONTAINS '@' AND EMAIL-ADDRESS CONTAINS '.' MOVE 'Y' TO IS-VALID ELSE MOVE 'N' TO IS-VALID END-IF GOBACK. END FUNCTION VALIDATE-EMAIL. * Usage IF FUNCTION VALIDATE-EMAIL(USER-EMAIL) = 'Y' DISPLAY 'Valid email address' ELSE DISPLAY 'Invalid email address' END-IF
Functions provide reusable validation logic.
12345678910111213141516171819202122232425262728293031* String manipulation function FUNCTION-ID REVERSE-STRING USING INPUT-STRING RETURNING REVERSED-STRING. DATA DIVISION. LINKAGE SECTION. 01 INPUT-STRING PIC X(50). 01 REVERSED-STRING PIC X(50). WORKING-STORAGE SECTION. 01 STRING-LENGTH PIC 9(2). 01 COUNTER PIC 9(2). 01 TEMP-CHAR PIC X. PROCEDURE DIVISION USING INPUT-STRING RETURNING REVERSED-STRING. MOVE INPUT-STRING TO REVERSED-STRING INSPECT REVERSED-STRING TALLYING STRING-LENGTH FOR CHARACTERS PERFORM VARYING COUNTER FROM 1 BY 1 UNTIL COUNTER > STRING-LENGTH / 2 MOVE REVERSED-STRING(COUNTER:1) TO TEMP-CHAR MOVE REVERSED-STRING(STRING-LENGTH - COUNTER + 1:1) TO REVERSED-STRING(COUNTER:1) MOVE TEMP-CHAR TO REVERSED-STRING(STRING-LENGTH - COUNTER + 1:1) END-PERFORM GOBACK. END FUNCTION REVERSE-STRING. * Usage MOVE FUNCTION REVERSE-STRING('HELLO') TO REVERSED-WORD DISPLAY 'Reversed: ' REVERSED-WORD
Functions enable complex string manipulation operations.
Following these best practices ensures effective use of the FUNCTION-ID clause for functional programming.
Pitfall | Problem | Solution |
---|---|---|
Complex functions | Hard to understand and maintain | Keep functions simple and focused |
No parameter validation | Incorrect results or errors | Always validate input parameters |
Inconsistent return types | Confusing and error-prone | Use consistent return value types |
Poor naming | Hard to understand function purpose | Use descriptive function names |
No error handling | Functions fail without proper error messages | Implement proper error handling |
Use Case | FUNCTION-ID Suitability | Reasoning |
---|---|---|
Reusable logic | Excellent | Perfect for code that needs to be reused |
Complex calculations | Excellent | Ideal for complex business logic |
Data validation | Good | Good for validation rules |
Simple operations | Poor | Overkill for simple operations |
Performance-critical code | Poor | Function call overhead may be too high |
Usage | Syntax | Example |
---|---|---|
Basic function | FUNCTION-ID function-name | FUNCTION-ID CALCULATE-TOTAL |
Function with parameters | FUNCTION-ID function-name USING params | FUNCTION-ID ADD-NUMBERS USING PARAM1 PARAM2 |
Function with return | FUNCTION-ID function-name RETURNING result | FUNCTION-ID CALCULATE-TOTAL RETURNING RESULT |
Function call | FUNCTION function-name(params) | FUNCTION ADD-NUMBERS(100, 200) |
Function in expression | COMPUTE result = FUNCTION function-name(params) | COMPUTE TOTAL = FUNCTION ADD-NUMBERS(A, B) |
1. What is the primary purpose of the FUNCTION-ID clause in COBOL?
2. Which clause is used to specify the return type of a function?
3. What is the correct syntax for defining a function parameter?
4. How do you return a value from a function in COBOL?
5. What is the relationship between FUNCTION-ID and PROGRAM-ID?
Understanding the PROGRAM-ID clause for program definition.
Understanding the FUNCTION statement for function calls.
Complete guide to functional programming in COBOL.
Understanding parameter passing in COBOL.
Understanding return values in COBOL functions.