Generics in COBOL
* Starting with version 2002, COBOL has added support for
* object-oriented programming, which provides some similar
* capabilities to generics in other languages.
IDENTIFICATION DIVISION.
PROGRAM-ID. GENERICS-EXAMPLE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 WS-STRING-ARRAY.
05 WS-STRING OCCURS 3 TIMES PIC X(10).
01 WS-INDEX PIC 9(2).
01 WS-SEARCH-ITEM PIC X(10).
LINKAGE SECTION.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
PERFORM INITIALIZE-DATA
PERFORM FIND-INDEX
PERFORM CREATE-AND-DISPLAY-LIST
STOP RUN.
INITIALIZE-DATA.
MOVE "foo" TO WS-STRING(1)
MOVE "bar" TO WS-STRING(2)
MOVE "zoo" TO WS-STRING(3).
* As COBOL doesn't have built-in generics, we implement a
* specific search function for our string array.
FIND-INDEX.
MOVE "zoo" TO WS-SEARCH-ITEM
PERFORM VARYING WS-INDEX FROM 1 BY 1
UNTIL WS-INDEX > 3 OR
WS-STRING(WS-INDEX) = WS-SEARCH-ITEM
CONTINUE
END-PERFORM
IF WS-INDEX <= 3
DISPLAY "index of zoo: " WS-INDEX
ELSE
DISPLAY "zoo not found"
END-IF.
* In COBOL, we can use object-oriented features to create
* a linked list-like structure. Here's a simplified version
* using a table instead.
CREATE-AND-DISPLAY-LIST.
PERFORM CREATE-LIST
PERFORM DISPLAY-LIST.
CREATE-LIST.
INITIALIZE WS-STRING-ARRAY
MOVE "10" TO WS-STRING(1)
MOVE "13" TO WS-STRING(2)
MOVE "23" TO WS-STRING(3).
DISPLAY-LIST.
DISPLAY "list: " WS-STRING(1) " "
WS-STRING(2) " " WS-STRING(3).
This COBOL program demonstrates concepts similar to those in the original generics example, adapted to COBOL’s capabilities:
We define a string array to represent the slice in the original example.
The
FIND-INDEX
paragraph implements a search function similar to theSlicesIndex
function in the original. It’s not generic, but performs a similar operation on our string array.Instead of a generic linked list, we use a simple array to represent the list. The
CREATE-AND-DISPLAY-LIST
paragraph, along with its sub-paragraphs, demonstrates creating and displaying this list.The
MAIN-PROCEDURE
ties everything together, calling our various procedures in sequence.
Note that COBOL doesn’t have direct equivalents for some of the advanced features used in the Go example, such as generics or user-defined types. However, this example shows how similar functionality can be achieved using COBOL’s features.
To run this program, you would typically compile it and then execute the resulting program. The exact commands may vary depending on your COBOL compiler and environment.
$ cobc -x generics-example.cob
$ ./generics-example
index of zoo: 03
list: 10 13 23
This demonstrates basic COBOL programming concepts and how they can be used to implement functionality similar to generics in other languages.