Особенности 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), которая фиксирует точное число цифр. - Точка — не украшение, а обязательный знак завершения инструкции; без неё программа может работать не так, как задумано.