IDENTIFICATION и ENVIRONMENT DIVISION
Собираем минимальный, но полноценный скелет программы: знакомимся с первыми двумя DIVISION поближе.
PROGRAM-ID — обязательный элемент IDENTIFICATION DIVISION, который задаёт уникальное имя программы.
В прошлом уроке мы увидели все четыре DIVISION издалека. Теперь заглянем внутрь первых двух — IDENTIFICATION и ENVIRONMENT — и разберём, что туда действительно пишут.
Зачем программе «представляться»
Когда ты подаёшь заявление в какое-нибудь учреждение, первым делом заполняешь графы «ФИО» и «дата». Это не сама суть заявления, но без этого документ не примут — непонятно, чьё это заявление и когда оно составлено. IDENTIFICATION DIVISION — это ровно такая графа для программы: она называет программу по имени, чтобы компьютер и другие программисты точно знали, с чем имеют дело.
В больших организациях, где над одной системой могут работать сотни программ COBOL (представь банк с тысячами операций — переводы, начисление процентов, выписки), без чёткого именования быстро наступил бы хаос. Поэтому имя программы — не формальность, а необходимость.
Синтаксис IDENTIFICATION DIVISION
Вот как выглядит эта часть на практике:
IDENTIFICATION DIVISION.
PROGRAM-ID. RASCHET-ZARPLATY.
AUTHOR. IVANOV-A-A.
DATE-WRITTEN. 2024-03-15.Разберём по строчкам:
IDENTIFICATION DIVISION.— заголовок блока, обязательная первая строка любой программы.PROGRAM-ID. RASCHET-ZARPLATY.— единственный обязательный элемент внутри этого DIVISION. Задаёт имя программы. Имя пишут заглавными буквами, без пробелов (вместо пробела — дефис), по историческим ограничениям некоторых компиляторов длина имени не превышает 8 символов, поэтому имена часто выглядят сокращённо и капслоком.AUTHOR. IVANOV-A-A.— необязательная строка, автор программы. В современных проектах используют реже (эту информацию хранит система контроля версий), но исторически элемент очень распространён и до сих пор встречается в старом промышленном коде.DATE-WRITTEN. 2024-03-15.— необязательная дата написания программы, тоже для справки.
Заметь: каждая строка заканчивается точкой — это отдельное предложение внутри DIVISION.
Что делает ENVIRONMENT DIVISION
Если IDENTIFICATION — это «кто я», то ENVIRONMENT DIVISION — это «на каком оборудовании и с какими файлами я работаю». Изначально COBOL создавался в эпоху, когда программы писали для конкретных мейнфреймов — больших промышленных компьютеров, и часто нужно было явно указать: программа компилируется на одном компьютере, а выполняться будет на другом. Для этого существует секция CONFIGURATION SECTION.
Если программе нужно работать с внешними файлами (например, читать список клиентов из файла), в ENVIRONMENT DIVISION есть секция INPUT-OUTPUT SECTION, где эти файлы «прописывают» — связывают логическое имя файла внутри программы с реальным путём на диске.
Минимальный скелет программы
Для учебных примеров и простых задач ENVIRONMENT DIVISION зачастую вообще не нужен — если программа не работает с файлами и её не нужно привязывать к конкретному оборудованию, блок можно смело пропустить. Вот минимальный, но абсолютно рабочий скелет:
IDENTIFICATION DIVISION.
PROGRAM-ID. SKELET.
DATA DIVISION.
PROCEDURE DIVISION.
STOP RUN.Вывод:
(программа ничего не печатает, просто корректно завершает работу)Обрати внимание — ENVIRONMENT DIVISION здесь просто отсутствует, и это совершенно нормально. Программа компилируется и запускается без единой ошибки: обязательны только заголовок IDENTIFICATION с PROGRAM-ID и блок PROCEDURE с командой завершения STOP RUN.
Более полный пример с ENVIRONMENT DIVISION
А вот так может выглядеть программа, которой действительно нужны настройки окружения — например, она собирается читать файл с данными о продажах:
IDENTIFICATION DIVISION.
PROGRAM-ID. OTCHET-PRODAZH.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT PRODAZHI-FILE ASSIGN TO "prodazhi.dat".
DATA DIVISION.
PROCEDURE DIVISION.
STOP RUN.Строка SELECT PRODAZHI-FILE ASSIGN TO "prodazhi.dat" связывает внутреннее имя файла PRODAZHI-FILE, которое программа будет использовать в своей логике, с реальным файлом prodazhi.dat на диске. Дальше в DATA DIVISION нужно будет описать структуру этого файла — но об этом в другом разделе учебника, посвящённом работе с данными.
Частые ошибки
- Забывают точку после PROGRAM-ID — вся строка
PROGRAM-ID. Имя.состоит из двух коротких предложений, и в обоих нужна точка. - Используют пробелы или строчные буквы в имени программы — некоторые старые компиляторы COBOL требуют имя без пробелов и приветствуют заглавные буквы; лучше сразу привыкнуть к дефисам вместо пробелов.
- Пишут ENVIRONMENT DIVISION «на всякий случай», даже когда он пустой — пустой блок без секций внутри просто не несёт смысла и обычно его лучше не писать, если он не нужен.
- Забывают, что DATA DIVISION тоже нужно объявить, если она пуста — если хочется описать данные, заголовок
DATA DIVISION.должен присутствовать, даже без содержимого его писать не обязательно, если данные не нужны совсем.
Итоги
- IDENTIFICATION DIVISION обязателен и всегда содержит хотя бы
PROGRAM-ID— имя программы. AUTHORиDATE-WRITTEN— необязательные информационные строки для справки.- ENVIRONMENT DIVISION описывает окружение и связывает программу с внешними файлами через
SELECT ... ASSIGN TO, но может отсутствовать, если это не нужно. - Минимальная рабочая программа COBOL — это IDENTIFICATION с PROGRAM-ID и PROCEDURE с STOP RUN.