Справочник по COBOL
Назначение
Справочник-шпаргалка по COBOL — типы, синтаксис, стандартная библиотека, типовые паттерны. Не заменяет пошаговое обучение. Учебный курс: раздел.
Краткое пояснение
Компоненты и ключевые особенности языка.
Как пользоваться этим справочником
это рабочая "карта" для быстрых ответов:
- забыли синтаксис
PERFORMилиEVALUATE— идите в раздел 5; - нужно вспомнить
PIC/USAGE— раздел 4; - работаете с файлами и
FILE STATUS— раздел 7 и шаблоны из 16; - сравниваете компиляторы — разделы 14 и 20.
Если вы только начинаете, сначала пройдите Основы, Типы, Управление, Параграфы, а затем возвращайтесь сюда как к шпаргалке.
Быстрый старт
cobc -x -free -std=cobol2023 payroll.cbl
Справочные таблицы
Содержание справочника
- 1. Общая структура программы COBOL
- 2. IDENTIFICATION DIVISION
- 3. ENVIRONMENT DIVISION
- 4. DATA DIVISION
- 5. PROCEDURE DIVISION
- 6. Встроенные функции (Intrinsic Functions)
- 7. Работа с файлами
- 8. Подпрограммы и модульность
- 9. Отладка и диагностика
- 10. Таблицы (массивы)
- 11. Объектно-ориентированное программирование в COBOL (COBOL 2002+)
- 12. Работа с базами данных: Embedded SQL
- 13. Современные расширения — JSON, XML, веб
- 14. Параметры компиляции в популярных средах
- 15. Настройки локализации и валют
- 16. Практические структуры и шаблоны
- 17. Производительность и оптимизация
- 18. Безопасность и надёжность
- 19. Полный список зарезервированных слов COBOL (по стандарту ISO/IEC 1989:2023)
- 20. Сравнение диалектов COBOL
- 21. Миграция устаревшего COBOL-кода
- 22. Инструменты анализа и качества кода
- 23. Типичные антипаттерны и пути устранения
- 24. Рекомендации по стилю и читаемости
1. Общая структура программы COBOL
Программа на COBOL состоит из четырёх обязательных разделов (divisions), каждый из которых содержит секции (sections) и параграфы (paragraphs). Все разделы следуют строго определённому порядку:
- IDENTIFICATION DIVISION — содержит метаданные программы.
- ENVIRONMENT DIVISION — описывает среду выполнения и внешние ресурсы.
- DATA DIVISION — объявляет все данные, используемые программой.
- PROCEDURE DIVISION — содержит исполняемый код.
Эта структура является фундаментальной и неизменной во всех стандартах COBOL.
2. IDENTIFICATION DIVISION
Этот раздел служит для идентификации программы и её авторства. Он всегда начинается с ключевого слова PROGRAM-ID.
Основные элементы
PROGRAM-ID.— указывает имя программы. Имя должно быть уникальным в пределах системы.AUTHOR.— имя или контакт разработчика (необязательно, но рекомендуется).DATE-WRITTEN.— дата создания программы.DATE-COMPILED.— автоматически заполняется компилятором.INSTALLATION.— организация или подразделение, где используется программа.REMARKS.— комментарии общего характера.
Пример:
IDENTIFICATION DIVISION.
PROGRAM-ID. PAYROLL-SYSTEM.
AUTHOR. EXAMPLE-AUTHOR.
DATE-WRITTEN. 2026-01-17.
REMARKS. Расчёт заработной платы сотрудников.
3. ENVIRONMENT DIVISION
Описывает взаимодействие программы с операционной системой и внешними устройствами. Состоит из двух секций:
3.1. CONFIGURATION SECTION
SOURCE-COMPUTER.— тип компьютера, на котором написана программа.OBJECT-COMPUTER.— тип компьютера, на котором выполняется программа.SPECIAL-NAMES.— определяет специальные символы, такие как десятичный разделитель (DECIMAL-POINT IS COMMA).
3.2. INPUT-OUTPUT SECTION
Содержит описание файлов и устройств ввода-вывода.
FILE-CONTROL
SELECT [логическое-имя] ASSIGN TO [физическое-устройство].
- Поддерживает параметры:
ORGANIZATION IS SEQUENTIAL | INDEXED | RELATIVEACCESS MODE IS SEQUENTIAL | RANDOM | DYNAMICRECORD KEY IS [поле]ALTERNATE RECORD KEY IS [поле]FILE STATUS IS [переменная-статуса]
Пример:
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMPLOYEE-FILE ASSIGN TO "EMP.DAT"
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS EMP-ID
FILE STATUS IS WS-FILE-STATUS.
4. DATA DIVISION
Самый объёмный раздел. Определяет все данные — файловые записи, рабочие переменные, константы, структуры.
4.1. FILE SECTION
Описывает структуру записей во внешних файлах.
- Каждый файл начинается с
FD [логическое-имя]. - За ним следует описание записи через
01уровень.
Пример:
FILE SECTION.
FD EMPLOYEE-FILE.
01 EMPLOYEE-RECORD.
05 EMP-ID PIC 9(6).
05 EMP-NAME PIC X(30).
05 EMP-SALARY PIC 9(7)V99.
4.2. WORKING-STORAGE SECTION
Объявляет переменные, существующие на протяжении всего выполнения программы.
- Уровни —
01— основная группа,02–49— подгруппы,77— независимые элементы,88— условные имена (level-88).
Типы данных (PICTURE / USAGE)
PIC X(n)— строка из n символов.PIC 9(n)— целое число из n цифр.PIC 9(n)V9(m)— десятичное число с m знаками после запятой (V — неявная точка).PIC S9(n)— знаковое число.PIC A(n)— алфавитные символы (A–Z, a–z, пробел).PIC B— бинарный флаг (в некоторых реализациях).USAGE IS DISPLAY— текстовое представление (по умолчанию).USAGE IS COMP— двоичное представление (машинное).USAGE IS COMP-3— упакованный десятичный формат (BCD).USAGE IS COMP-5— native binary (зависит от архитектуры).
Условные имена (Level 88)
Позволяют задавать логические значения:
01 WS-STATUS PIC X.
88 ACTIVE VALUE 'A'.
88 INACTIVE VALUE 'I'.
88 PENDING VALUE 'P'.
Использование:
IF ACTIVE
PERFORM PROCESS-EMPLOYEE
END-IF
4.3. LINKAGE SECTION
Описывает данные, передаваемые в программу извне (например, через вызов подпрограммы или транзакцию CICS).
4.4. LOCAL-STORAGE SECTION (COBOL 85+)
Переменные, создаваемые при каждом вызове программы и уничтожаемые после завершения. Аналог локальных переменных в других языках.
5. PROCEDURE DIVISION
Содержит исполняемую логику. Может принимать параметры, если это подпрограмма.
5.1. Заголовок
PROCEDURE DIVISION [USING параметр1, параметр2...].
5.2. Параграфы и секции
- Параграф — блок кода с именем, заканчивающийся точкой или
END-PARAGRAPH. - Секция — группа параграфов, начинается с
[имя] SECTION.
5.3. Операторы управления потоком
Условные операторы
IF условие THEN ... [ELSE ...] END-IF.EVALUATE— аналог switch/case:
EVALUATE TRUE
WHEN EMP-SALARY > 100000
MOVE "HIGH" TO WS-CATEGORY
WHEN EMP-SALARY > 50000
MOVE "MEDIUM" TO WS-CATEGORY
WHEN OTHER
MOVE "LOW" TO WS-CATEGORY
END-EVALUATE.
Циклы
PERFORM— универсальный цикл:PERFORM параграф— однократный вызов.PERFORM параграф N TIMES— повтор N раз.PERFORM VARYING i FROM 1 BY 1 UNTIL i > 10— цикл с инкрементом.PERFORM UNTIL условие— цикл с проверкой в конце.PERFORM WITH TEST BEFORE/ AFTER— управление моментом проверки.
Выход из блока
EXIT PARAGRAPH,EXIT SECTION,EXIT PROGRAM— явный выход.
6. Встроенные функции (Intrinsic Functions)
COBOL 85 и особенно COBOL 2002+ поддерживают богатый набор встроенных функций.
Числовые функции
FUNCTION ABS(x)— модуль числа.FUNCTION SQRT(x)— квадратный корень.FUNCTION LOG(x),FUNCTION EXP(x)FUNCTION MAX(a, b, ...),FUNCTION MIN(...)FUNCTION MOD(a, b)— остаток от деления.FUNCTION REM(a, b)— остаток с учётом знака.
Строковые функции
FUNCTION LENGTH(field)— длина строки.FUNCTION TRIM(field LEADING/TRAILING/BOTH)FUNCTION SUBSTRING(field FROM start FOR length)FUNCTION UPPER-CASE(field),FUNCTION LOWER-CASE(field)
Дата и время
FUNCTION CURRENT-DATE— возвращает 21-значную строку: ГГГГММДДЧЧММССмммТЗFUNCTION DATE-OF-INTEGER(days-since-1601)FUNCTION INTEGER-OF-DATE(YYYYMMDD)
Математические и статистические
FUNCTION SUM(...),FUNCTION MEAN(...),FUNCTION MEDIAN(...)FUNCTION RANDOM— генератор псевдослучайных чисел.
7. Работа с файлами
Открытие и закрытие
OPEN INPUT | OUTPUT | I-O | EXTEND file-name.CLOSE file-name [REEL | UNIT].
Чтение и запись
READ file-name [NEXT RECORD] [INTO переменная] [AT END ...]WRITE record [FROM переменная]REWRITE record [FROM переменная]
DELETE file-name RECORD
Позиционирование
- для indexed/random файлов.
START file-name KEY IS = / > / < key-value
8. Подпрограммы и модульность
Вызов подпрограммы
CALL "имя-программы" [USING аргументы] [RETURNING результат]
- Подпрограмма должна иметь
PROGRAM-IDсовпадающий с именем вызова.
Возврат
GOBACK— завершает подпрограмму и возвращает управление вызывающей программе.STOP RUN— завершает всю программу (обычно в main).
9. Отладка и диагностика
DISPLAY переменная— вывод в стандартный поток.ACCEPT переменная— ввод с терминала (в учебных целях).ON SIZE ERROR— обработка переполнения при арифметике.ON OVERFLOW— при операциях с таблицами.
10. Таблицы (массивы)
COBOL поддерживает одномерные и многомерные таблицы через OCCURS.
01 STUDENT-TABLE.
05 STUDENT OCCURS 100 TIMES.
10 NAME PIC X(30).
10 GRADE PIC 99.
Доступ:
MOVE "Иванов" TO NAME(1).
ADD 1 TO GRADE(1).
Операции (таблица STUDENT OCCURS n — фиксированное число элементов):
| Действие | Синтаксис |
|---|---|
| Прочитать поле | MOVE NAME(i) TO WS-... |
| Записать поле | MOVE WS-... TO NAME(i) |
| Индекс | целый подскрипт (1) … (n) или USAGE IS INDEX |
| Поиск строки | SEARCH, SEARCH ALL (отсортированная таблица + KEY IS) |
Динамического add в конец, как в ArrayList, в COBOL нет: размер задаётся OCCURS при компиляции (или отдельные механизмы в конкретном диалекте).
Индексированные таблицы:
01 IDX USAGE IS INDEX.
SET IDX TO 1.
MOVE NAME(IDX) TO WS-TEMP.
Поиск:
SEARCH— линейный поиск.SEARCH ALL— бинарный поиск (требует сортировки иKEY IS).
11. Объектно-ориентированное программирование в COBOL (COBOL 2002+)
Примеры ниже — COBOL 2002+ (Micro Focus, IBM и др.). В типичном z/OS legacy-коде ООП почти не используется.
Начиная со стандарта COBOL 2002, язык поддерживает объектную модель (классы, методы, интерфейсы); степень совместимости с Java/.NET зависит от компилятора.
11.1. Классы
Класс объявляется в отдельной программе или в разделе CLASS DEFINITION.
Код ITЗагрузка примера кода…
11.2. Наследование
Подкласс указывает родительский класс через INHERITS.
CLASS-ID. SavingsAccount INHERITS BankAccount.
METHOD-ID. ApplyInterest.
PROCEDURE DIVISION.
COMPUTE balance = balance * 1.05.
END METHOD ApplyInterest.
END CLASS SavingsAccount.
11.3. Интерфейсы
Интерфейс определяет контракт без реализации:
INTERFACE-ID. Payable.
METHOD-ID. Pay PUBLIC.
PROCEDURE DIVISION USING BY VALUE amount AS BINARY-LONG.
END METHOD Pay.
END INTERFACE Payable.
Класс реализует интерфейс через IMPLEMENTS:
CLASS-ID. Employee IMPLEMENTS Payable.
...
END CLASS Employee.
11.4. Полиморфизм и динамическое связывание
Вызов методов происходит через ссылки на объекты:
01 account OBJECT REFERENCE BankAccount.
01 savings OBJECT REFERENCE SavingsAccount.
SET account TO NEW BankAccount(1000).
SET savings TO NEW SavingsAccount(2000).
INVOKE account::Deposit(500).
INVOKE savings::ApplyInterest().
12. Работа с базами данных — Embedded SQL
COBOL тесно интегрируется с реляционными СУБД через встроенный SQL.
12.1. Подключение
В EXEC SQL блоках пишется стандартный SQL.
EXEC SQL INCLUDE SQLCA END-EXEC.
EXEC SQL WHENEVER SQLERROR GO TO DB-ERROR END-EXEC.
12.2. Подключение к БД
EXEC SQL CONNECT TO 'mydb' USER 'user' USING 'password' END-EXEC.
12.3. Выборка данных
EXEC SQL
SELECT name, salary INTO :WS-NAME, :WS-SALARY
FROM employees
WHERE id = :WS-ID
END-EXEC.
Хост-переменные (:WS-NAME) должны быть объявлены в WORKING-STORAGE.
12.4. Курсоры для множественных строк
Код ITЗагрузка примера кода…
12.5. Обновление и транзакции
EXEC SQL UPDATE employees SET salary = salary * 1.1 WHERE dept = 'IT' END-EXEC.
EXEC SQL COMMIT WORK END-EXEC.
EXEC SQL ROLLBACK WORK END-EXEC.
13. Современные расширения — JSON, XML, веб
Раздел описывает расширения компиляторов (IBM Enterprise COBOL, Micro Focus и др.), а не единый переносимый стандарт ISO. Синтаксис и имена модулей уточняйте в документации вашей среды.
13.1. Работа с JSON
Типичный подход вендоров — встроенные операторы или библиотеки, например JSON PARSE / JSON GENERATE (Micro Focus, IBM). Универсального CALL "JSON-PARSE" в стандарте COBOL нет.
13.2. XML
Аналогично — через XML GENERATE и XML PARSE:
XML GENERATE xml-output FROM employee-record
COUNT IN ws-count
ON EXCEPTION DISPLAY "Ошибка XML"
END-XML.
13.3. Веб-сервисы
COBOL может выступать как клиент или сервер SOAP/REST:
INVOKE WEB SERVICE— вызов удалённого сервиса.SERVICE-SECTION— определение собственного сервиса (в CICS или Enterprise Server).
14. Параметры компиляции в популярных средах
14.1. IBM Enterprise COBOL for z/OS
Часто используемые опции:
ARCH(10)— целевая архитектура процессора.OPTIMIZE(FULL)— полная оптимизация.RENT— создание рекурсивно-вызываемого модуля.LIST— генерация листинга.MAP— таблица символов.SQL— включить поддержку Embedded SQL.CICS— генерация кода для CICS.DLL— создание динамической библиотеки.
Пример:
//COBOL EXEC PGM=IGYCRCTL,
//PARM='LIB,LIST,MAP,OPTIMIZE(FULL),SQL'
14.2. GnuCOBOL (open source)
Компиляция:
cobc -x -free -std=cobol2023 payroll.cbl
Опции:
-x— исполняемый файл.-m— модуль (библиотека).-free— свободный формат.-std=cobol85|cobol2002|cobol2014|cobol2023-O2— оптимизация.-I include_dir— пути к копиям.-L lib_dir -l library— линковка.
14.3. Micro Focus Visual COBOL
- Поддержка .NET и JVM.
- Интеграция с Visual Studio.
- Опции —
ilgen,jvmgen,debug,trace.
15. Настройки локализации и валют
15.1. Десятичный разделитель
В SPECIAL-NAMES:
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
Теперь PIC 999V99 будет отображаться как 123,45.
15.2. Валюта
В SPECIAL-NAMES задаётся символ валюты для редактируемых полей (PIC с $ или указанным знаком):
SPECIAL-NAMES.
CURRENCY SIGN IS LIT"RUB".
Пример поля для отчёта:
01 PRICE-DISPLAY PIC $$$$$9.99.
Конкретный символ (₽, $ и т.д.) зависит от кодовой страницы и настроек компилятора.
15.3. Кодировки
CODE-SET IS UTF-8— вFDилиSD.ALPHABET— определение пользовательского алфавита.
16. Практические структуры и шаблоны
16.1. Обработка ошибок файлов
Код ITЗагрузка примера кода…
16.2. Журналирование
01 LOG-RECORD.
05 LOG-TIME PIC X(8).
05 LOG-MESSAGE PIC X(100).
MOVE FUNCTION CURRENT-DATE(9:6) TO LOG-TIME.
MOVE "Обработка сотрудника завершена" TO LOG-MESSAGE.
WRITE LOG-RECORD.
16.3. Защита от переполнения
ADD A TO B ON SIZE ERROR
DISPLAY "Переполнение при сложении"
MOVE 99999999 TO RESULT
END-ADD.
17. Производительность и оптимизация
- Используйте
COMP-3для чисел — меньше памяти, быстрее операции. - Избегайте
STRINGиUNSTRINGв циклах — они медленные. - Предпочитайте
SEARCH ALLвместоSEARCHдля больших таблиц. - Минимизируйте количество
MOVE CORRESPONDING— он неэффективен. - Используйте
INITIALIZEвместо ручного обнуления.
18. Безопасность и надёжность
- Все входные данные из файлов или терминала проверяйте на корректность.
- Используйте
VALIDATE(в Enterprise COBOL) для контроля форматов. - Не храните пароли в открытом виде в исходном коде.
- Применяйте
ON EXCEPTIONпри работе с внешними ресурсами.
19. Полный список зарезервированных слов COBOL (по стандарту ISO/IEC 1989:2023)
COBOL содержит более 350 зарезервированных слов. Ниже приведены ключевые категории и наиболее часто используемые термины. Слова сгруппированы по функциональному назначению для удобства навигации.
19.1. Структурные слова разделов и секций
Код ITЗагрузка примера кода…
19.2. Идентификация и метаданные
PROGRAM-ID
AUTHOR
DATE-WRITTEN
DATE-COMPILED
INSTALLATION
REMARKS
CLASS-ID
INTERFACE-ID
METHOD-ID
19.3. Описание данных
Код ITЗагрузка примера кода…
19.4. Условные имена и логика
LEVEL 88
TRUE
FALSE
NULL
ZERO ZEROS ZEROES
SPACE SPACES
HIGH-VALUE HIGH-VALUES
LOW-VALUE LOW-VALUES
QUOTE QUOTES
19.5. Управление выполнением
IF THEN ELSE END-IF
EVALUATE WHEN OTHER END-EVALUATE
PERFORM END-PERFORM
VARYING BY UNTIL
TIMES
WITH TEST BEFORE AFTER
EXIT PARAGRAPH SECTION PROGRAM
GOBACK
STOP RUN
CONTINUE
NEXT SENTENCE
19.6. Ввод-вывод и файлы
SELECT ASSIGN TO
ORGANIZATION
ACCESS MODE
SEQUENTIAL RANDOM DYNAMIC
RECORD KEY
ALTERNATE RECORD KEY
FILE STATUS
FD SD
OPEN CLOSE READ WRITE REWRITE DELETE
START
AT END
INVALID KEY
19.7. Арифметика и операции
ADD SUBTRACT MULTIPLY DIVIDE COMPUTE
GIVING REMAINDER ROUNDED
ON SIZE ERROR
CORRESPONDING CORR
MOVE
SET
TO
UPON
19.8. Таблицы и поиск
SEARCH ALL
INDEX
SET INDEX TO
KEY IS
ASCENDING DESCENDING
19.9. Объектно-ориентированные конструкции
INHERITS
IMPLEMENTS
EXTENDS
OVERRIDE
ABSTRACT
FINAL
PUBLIC PRIVATE PROTECTED
NEW
INVOKE
SUPER
THIS
19.10. Встроенные функции
FUNCTION
ABS ACOS ASIN ATAN COS SIN TAN
EXP LOG SQRT
MAX MIN SUM MEAN MEDIAN
TRIM SUBSTRING LENGTH
UPPER-CASE LOWER-CASE
CURRENT-DATE
INTEGER-OF-DATE DATE-OF-INTEGER
RANDOM
19.11. SQL и базы данных
EXEC SQL END-EXEC
INCLUDE
WHENEVER
CONNECT DISCONNECT
DECLARE CURSOR
OPEN CLOSE FETCH
COMMIT ROLLBACK
19.12. Отладка и системные вызовы
DISPLAY ACCEPT
ACCEPT OMITTED
DEBUGGING MODE
DUMP
CALL CANCEL
RETURNING
USING
BY REFERENCE VALUE CONTENT
Примечание — Некоторые слова (например,
DEBUGGING,OMITTED) считаются устаревшими, но поддерживаются для обратной совместимости.
20. Сравнение диалектов COBOL
Разные компиляторы реализуют стандарт с различной степенью полноты и добавляют собственные расширения.
20.1. IBM Enterprise COBOL for z/OS
- Основной диалект для мейнфреймов.
- Поддержка CICS, IMS, DB2.
- Расширения —
XML GENERATE,JSON PARSE,VALIDATE. - Оптимизация под архитектуру z/Architecture.
- Строгая проверка формата колонок (если не указан
-free).
20.2. Micro Focus Visual COBOL
- Поддержка Windows, Linux, .NET, JVM.
- Полная ООП-модель, включая наследование и интерфейсы.
- Интеграция с Visual Studio и Eclipse.
- Расширения —
METHOD,PROPERTY,EVENT. - Поддержка REST/SOAP через
WEB SERVICE.
20.3. GnuCOBOL (open source)
- Кроссплатформенный, компилирует в C.
- Поддержка COBOL 85, частично COBOL 2002.
- Не поддерживает встроенный ООП (только через обёртки).
- Подходит для обучения и миграции небольших систем.
- Гибкий свободный формат (
-free).
20.4. Fujitsu NetCOBOL
- Для Windows и .NET.
- Хорошая поддержка GUI через SCREEN SECTION.
- Совместимость с Visual COBOL по синтаксису.
- Включает отладчик и профилировщик.
20.5. ACUCOBOL-GT
- Ориентирован на бизнес-приложения с GUI.
- Собственный runtime и виртуальная машина.
- Поддержка графики, отчётов, сетевых вызовов.
Рекомендация: При переносе кода между платформами избегайте диалект-специфичных конструкций. Используйте только стандартные элементы, если требуется максимальная переносимость.
21. Миграция устаревшего COBOL-кода
21.1. Этапы модернизации
- Анализ текущего состояния — сбор метрик — объём кода, количество программ, зависимостей.
- Очистка кода — удаление закомментированных блоков, устаревших параграфов.
- Переход на свободный формат — замена фиксированного формата (колонки 8–72) на свободный.
- Замена
GO TO— рефакторинг наPERFORMи структурные конструкции. - Введение
END-IF,END-PERFORM— явное завершение блоков вместо точки. - Добавление
LOCAL-STORAGE— для потокобезопасности. - Интеграция с современными API — через JSON/XML или вызов внешних сервисов.
21.2. Автоматизированные инструменты
- Micro Focus Modernize — преобразует COBOL в .NET или Java.
- IBM Application Discovery and Delivery Intelligence (ADDI) — анализ зависимостей.
- Raincode COBOL Compiler for .NET — компиляция в управляемый код.
- Open Source: cobc-refactor — скрипты на Python для переформатирования.
21.3. Сохранение бизнес-логики
- Не меняйте алгоритмы без тестового покрытия.
- Создайте регрессионные тесты до начала рефакторинга.
- Используйте
COPYкниги как модули — не дублируйте логику.
22. Инструменты анализа и качества кода
22.1. SonarQube + COBOL Plugin
- Анализ сложности, дублирования, уязвимостей.
- Правила — избегать
GO TO, ограничивать длину параграфа, использоватьEND-конструкции.
22.2. CAST Highlight
- Оценка технического долга.
- Классификация компонентов по риску поддержки.
22.3. GnuCOBOL Checker
- Статический анализ синтаксиса.
- Проверка соответствия стандарту.
22.4. Встроенные средства компиляторов
- IBM:
TESTопция — генерация отладочной информации. - Micro Focus:
TRACE— логирование вызовов.
23. Типичные антипаттерны и пути устранения
23.1. "Спагетти-код" с GO TO
Проблема: Непредсказуемый поток управления.
Решение: Заменить на PERFORM параграфов с чёткой семантикой. Использовать EVALUATE вместо цепочек IF.
23.2. Дублирование логики в COPY книгах
Проблема: Изменение в одной копии не применяется ко всем.
Решение: Вынести общую логику в подпрограммы. Использовать параметризованные COPY (если поддерживается).
23.3. Отсутствие обработки FILE STATUS
Проблема: Программа падает при ошибке ввода-вывода.
Решение: Всегда проверять FILE STATUS после операций с файлами. Реализовать централизованную обработку ошибок.
23.4. Жёстко закодированные значения
Проблема: MOVE 12345 TO EMP-ID — трудно поддерживать.
Решение: Использовать константы через 77 или 01 с VALUE. Лучше — условные имена (88 уровень).
23.5. Отсутствие модульности
Проблема: Одна программа делает всё.
Решение: Разделить на main-программу и подпрограммы. Использовать CALL для повторяющихся задач.
23.6. Игнорирование ON SIZE ERROR
Проблема: Переполнение приводит к некорректным данным.
Решение: Добавить обработку арифметических ошибок во всех вычислениях.
24. Рекомендации по стилю и читаемости
- Используйте осмысленные имена:
CUSTOMER-NAME, а неX1. - Разделяйте логические блоки пустыми строками.
- Все параграфы — в UPPER CASE или CamelCase, но единообразно.
- Комментируйте почему, а не что делает код.
- Ограничьте длину строки 80 символами (для совместимости).
- Избегайте
NEXT SENTENCE— он устарел и непредсказуем.
Практическая навигация по типовым задачам
| Задача | Где смотреть в этом справочнике | Дополнительно в курсе |
|---|---|---|
| Описать запись и поля | 4 DATA DIVISION, 4.1, 4.2 | Типы данных |
| Сделать цикл и ветвление | 5.3 (IF, EVALUATE, PERFORM) | Управление |
| Разбить логику на блоки | 5.2, 8 | Параграфы |
| Читать/писать файл и ловить ошибки | 7, 16.1 | Архитектура |
| Скомпилировать на GnuCOBOL | Быстрый старт, 14.2 | Первая программа |
| Подготовить модернизацию legacy | 21, 22, 23 | Итоги |
Мини-глоссарий по частым терминам
- Division — верхний раздел программы COBOL.
- Section — подгруппа внутри division.
- Paragraph — именованный исполняемый блок.
- PIC (PICTURE) — формат и длина поля.
- COPYBOOK — включаемый фрагмент описаний/констант.
- FILE STATUS — код результата файловой операции.
- Batch — пакетная обработка без интерактивного интерфейса.
Для общей базы по терминам программирования — Что такое код и как он работает, Функции, Операторы.
В подборках
Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:
Справочники — Справочник по Lua, Справочник по языку Fortran, Справочник по языку Swift, Справочник по Lisp, Справочник по языку Rust, Справочник по Pascal.