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.
Проверьте себя
1. Какой элемент внутри IDENTIFICATION DIVISION является обязательным?
AAUTHOR
BDATE-WRITTEN
CPROGRAM-ID
DCONFIGURATION SECTION
2. Для чего используется секция INPUT-OUTPUT SECTION в ENVIRONMENT DIVISION?
AДля описания переменных программы
BДля указания имени и автора программы
CДля связи внутренних имён файлов с реальными файлами на диске
DДля записи основной логики программы