Особенности COBOL: язык, похожий на английский

Открой любой код на COBOL — и удивишься: он читается почти как приказ, написанный на английском.

Философия COBOL — код должен быть понятен человеку без специального образования, даже если он видит программирование впервые.

Зачем языку быть похожим на английский

Вспомни, для кого создавался COBOL — для бизнеса. В 1959 году программистов было мало, а вот финансовых аналитиков, бухгалтеров и менеджеров, которым нужно было проверять и понимать логику расчётов, — намного больше. Авторы языка сознательно выбрали многословный синтаксис, похожий на обычные английские предложения, чтобы человек без диплома программиста мог хотя бы прочитать код и понять, что он делает — даже не умея его писать.

Сравни для наглядности. На Python сложение выглядит так: total = price + tax. На COBOL та же операция может быть записана как ADD PRICE TO TAX GIVING TOTAL — почти дословно «прибавь цену к налогу, получи итог». Это осознанный компромисс: кода приходится писать больше, зато его почти не нужно «переводить» для нетехнического специалиста.

Четыре обязательных раздела программы

Любая программа на COBOL строится из четырёх крупных блоков — их называют дивизионами (divisions). Каждый отвечает за свою часть работы, и порядок всегда одинаковый.

РазделЧто описывает
IDENTIFICATION DIVISIONНазвание программы, автор, дата — «паспорт» файла
ENVIRONMENT DIVISIONОкружение: какое оборудование и файлы используются
DATA DIVISIONВсе переменные и их типы — что и в каком виде будет храниться
PROCEDURE DIVISIONСама логика программы — что именно она делает, шаг за шагом

Это принципиально отличается от Python или JavaScript, где переменную можно объявить прямо там, где она нужна. В COBOL всё строго разделено: сначала ты описываешь ВСЕ данные заранее (в DATA DIVISION), и только потом пишешь логику работы с ними (в PROCEDURE DIVISION). Это как заранее разложить все ингредиенты на столе, прежде чем начать готовить, — не бегать к холодильнику посреди рецепта.

Разбираем простой пример построчно

Посмотрим на минимальную рабочую программу, которая выводит приветствие.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.

PROCEDURE DIVISION.
    DISPLAY "Привет, мир!".
    STOP RUN.

Вывод:

Привет, мир!

Разберём каждую строку.

  • IDENTIFICATION DIVISION. — открывает первый обязательный раздел, «паспорт» программы. Точка в конце строки в COBOL — не опечатка, а обязательный знак завершения предложения, как в обычном тексте.
  • PROGRAM-ID. HELLO-WORLD. — имя программы. Здесь мы её так и назвали, HELLO-WORLD.
  • PROCEDURE DIVISION. — начинается блок с реальной логикой. Заметь: в этом примере нет DATA DIVISION — он не обязателен, если программе не нужны собственные переменные.
  • DISPLAY "Привет, мир!". — команда DISPLAY выводит текст на экран, буквально «покажи». Это почти дословно читаемая инструкция.
  • STOP RUN. — команда завершения программы, «стоп, выполнение окончено».

Пример с переменными: расчёт зарплаты

Теперь пример посложнее — программа, которая описывает данные заранее и считает итоговую сумму, как и положено бизнес-языку.

IDENTIFICATION DIVISION.
PROGRAM-ID. ZARPLATA.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 OKLAD          PIC 9(5)V99 VALUE 50000.00.
01 PREMIYA        PIC 9(5)V99 VALUE 7500.50.
01 ITOGO          PIC 9(6)V99.

PROCEDURE DIVISION.
    ADD OKLAD TO PREMIYA GIVING ITOGO.
    DISPLAY "Итоговая сумма: " ITOGO.
    STOP RUN.

Вывод:

Итоговая сумма: 057500.50

Здесь появляется важная особенность COBOL — раздел WORKING-STORAGE SECTION внутри DATA DIVISION, где заранее объявлены все переменные («рабочее хранилище»). У каждой переменной есть так называемая PICTURE-клаузула (сокращённо PIC) — она описывает не просто тип данных, а точный формат числа: сколько цифр до запятой и сколько после.

Например, PIC 9(5)V99 значит: пять цифр (9(5)) до подразумеваемой десятичной точки (V) и две цифры после неё (99). Слово «подразумеваемой» здесь ключевое — символ V не хранится и не выводится, это просто разметка формата для компилятора. Именно поэтому в выводе ты видишь 057500.50 — COBOL честно печатает все пять цифр целой части, включая ведущие нули, потому что формат жёстко зафиксирован.

Строка ADD OKLAD TO PREMIYA GIVING ITOGO. читается почти как обычная фраза: «прибавь оклад к премии, результат помести в ИТОГО». В этом и есть суть философии языка — синтаксис максимально приближен к естественной речи.

Частые ошибки новичков

Когда учишь COBOL после Python или JavaScript, легко споткнуться на нескольких вещах.

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

Перепутать позиции в PICTURE-клаузуле. Новичок часто пытается положить число со слишком большим количеством цифр в переменную с меньшим форматом — COBOL либо обрежет лишнее, либо выдаст ошибку компиляции, в зависимости от настроек. Формат нужно продумывать заранее, а не «на глаз».

Пытаться объявить переменную прямо в PROCEDURE DIVISION. Так, как это делается в Python (x = 5 прямо посреди кода), в COBOL не работает — все переменные обязаны быть описаны заранее, в DATA DIVISION. Логика и данные всегда разделены.

Итоги

  • COBOL специально сделан многословным и похожим на английский язык, чтобы код был понятен даже нетехническому специалисту.
  • Программа всегда состоит из четырёх разделов (дивизионов): паспорт, окружение, данные, логика — именно в таком порядке.
  • Все переменные описываются заранее в DATA DIVISION, а их формат задаётся через PICTURE-клаузулу (PIC), которая фиксирует точное число цифр.
  • Точка — не украшение, а обязательный знак завершения инструкции; без неё программа может работать не так, как задумано.
Проверьте себя
1. Почему авторы COBOL сделали синтаксис языка многословным и похожим на обычные английские фразы?
AЧтобы программа выполнялась быстрее
BЧтобы код мог понять и проверить нетехнический специалист — например, бухгалтер или финансовый аналитик
CПотому что компьютеры 1959 года не понимали коротких команд
DЭто получилось случайно, авторы не ставили такую цель
2. Что означает PICTURE-клаузула PIC 9(5)V99 у переменной в COBOL?
AПеременная может хранить любой текст длиной до 5 символов
BПеременная — это дата в формате день.месяц.год
CПять цифр до подразумеваемой десятичной точки и две цифры после неё
DПеременная зарезервирована, но её нельзя использовать в вычислениях