Первая программа: Hello World по-COBOL-овски

Пишем и разбираем построчно свою первую полноценную программу на COBOL — старую добрую «Hello, world!».

DISPLAY — команда PROCEDURE DIVISION, которая выводит текст или значение переменной на экран.

Традиция первой программы на любом языке программирования одна и та же ещё с 1970-х: вывести на экран приветствие «Hello, world!». COBOL не исключение, хотя выглядит эта программа заметно масштабнее, чем на многих современных языках. Давайте напишем её и разберём по косточкам.

Полный код программы

Вот классическая программа, которая печатает приветствие:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. HELLO-WORLD.

       ENVIRONMENT DIVISION.

       DATA DIVISION.

       PROCEDURE DIVISION.
           DISPLAY "Privet, mir!".
           STOP RUN.

Вывод:

Privet, mir!

Всего восемь строк — и это уже полноценная, компилируемая и рабочая программа. Она короче большинства реальных COBOL-программ (в банковских системах отдельные программы разрастаются до тысяч строк), но структура у неё та же самая, что и у гигантов.

Разбор построчно

Пройдёмся по каждой строке и объясним, зачем она нужна:

  • IDENTIFICATION DIVISION. — открывает программу, обязательная первая строка.
  • PROGRAM-ID. HELLO-WORLD. — даёт программе имя HELLO-WORLD. Именно под этим именем компилятор будет знать программу.
  • ENVIRONMENT DIVISION. — присутствует, но пустой: этой программе не нужны ни файлы, ни специфичные настройки оборудования. Пустой блок здесь оставлен скорее для наглядности структуры — в реальном минимальном варианте его можно было бы убрать вовсе, как мы видели в прошлом уроке.
  • DATA DIVISION. — тоже пустой: программе не нужны переменные, потому что мы выводим готовую строку текста, а не значение какой-то переменной.
  • PROCEDURE DIVISION. — здесь начинается настоящая работа программы.
  • DISPLAY "Privet, mir!". — команда вывода. Всё, что стоит в кавычках, печатается на экран ровно как есть. В конце — точка, как и положено в конце предложения COBOL.
  • STOP RUN. — команда завершения программы. Без неё программа не поймёт, что работа закончена, и это обязательная последняя команда почти в каждой простой программе COBOL.

Важный нюанс: текст в кавычках мы написали латиницей (Privet, mir!), а не кириллицей. Это не прихоть — COBOL исторически создавался под окружения, где корректная поддержка кириллицы в текстовых литералах не гарантирована на всех компиляторах и терминалах. Поэтому в учебных и промышленных COBOL-программах, ориентированных на международную поддержку, часто используют транслит или английский текст.

А что если нужно вывести несколько строк?

Команду DISPLAY можно использовать сколько угодно раз подряд. Вот пример программы, которая печатает три строки — как будто это заголовок простого отчёта:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. OTCHET-HEADER.

       PROCEDURE DIVISION.
           DISPLAY "=====================".
           DISPLAY "OTCHET O PRODAZHAH".
           DISPLAY "=====================".
           STOP RUN.

Вывод:

=====================
OTCHET O PRODAZHAH
=====================

Заметь, что в этом примере мы вообще пропустили и ENVIRONMENT DIVISION, и DATA DIVISION — как мы выяснили в предыдущем уроке, они не обязательны, если программе они не нужны. Компилятор без проблем принимает программу, где после IDENTIFICATION DIVISION сразу идёт PROCEDURE DIVISION.

Частые ошибки при первом знакомстве с DISPLAY

  • Забывают точку в конце DISPLAY — строка DISPLAY "Privet, mir!" без завершающей точки может «слиться» со следующей командой для компилятора и вызвать ошибку.
  • Забывают STOP RUN — без явного завершения поведение программы становится непредсказуемым, в зависимости от компилятора и окружения. Хорошая привычка — всегда явно завершать программу.
  • Не закрывают кавычки — если открыть кавычку перед текстом и забыть закрыть, компилятор ждёт продолжения строки и выдаёт ошибку в неожиданном месте, иногда далеко от настоящей опечатки.
  • Путают одинарные и двойные кавычки — в разных диалектах COBOL допустимы оба варианта, но лучше выбрать один стиль (обычно двойные кавычки) и придерживаться его во всей программе для единообразия.

Итоги

  • Минимальная рабочая программа с выводом текста состоит из IDENTIFICATION DIVISION с PROGRAM-ID и PROCEDURE DIVISION с командами DISPLAY и STOP RUN.
  • Команда DISPLAY "текст". печатает текст на экран, а STOP RUN. корректно завершает программу.
  • ENVIRONMENT DIVISION и DATA DIVISION можно не писать вовсе, если программе не нужны файлы или переменные.
  • DISPLAY можно вызывать многократно подряд, чтобы вывести несколько строк.
Проверьте себя
1. Какая команда PROCEDURE DIVISION выводит текст на экран?
APROGRAM-ID
BDISPLAY
CSELECT
DSTOP RUN
2. Что произойдёт, если в программе на COBOL пропустить ENVIRONMENT DIVISION и DATA DIVISION?
AПрограмма не скомпилируется — эти блоки строго обязательны всегда
BПрограмма скомпилируется и заработает, если эти блоки ей не нужны
CПрограмма скомпилируется, но DISPLAY перестанет работать
DКомпилятор автоматически создаст их пустыми, но с ошибкой предупреждения