Когда использовать точки в COBOL?
Я совершенно новичок в COBOL, и мне интересно:
Кажется, нет никакой разницы между
DISPLAY "foo"
а также
DISPLAY "foo".
Что на самом деле делает точка в конце строки?
Когда я должен использовать / избегать этого?
6 ответов
Период заканчивается "предложением". Это может повлиять на вашу логику. Рассматривать...
IF A = B
PERFORM 100-DO
SET I-AM-DONE TO TRUE.
...а также...
IF A = B
PERFORM 100-DO.
SET I-AM-DONE TO TRUE
Период заканчивается IF в обоих примерах. В первом уровень I-AM-DONE 88 установлен условно, во втором - безусловно.
Многие люди предпочитают использовать явные ограничители области видимости и использовать только один период, часто в физической строке, чтобы выделить его в конце абзаца.
Я печатаю это по памяти, поэтому, если у кого-то есть исправления, я был бы признателен.
Cobol 1968 потребовал использования точки для завершения названия раздела, имени раздела процедуры или раздела процедуры. Каждый элемент разделения данных заканчивался точкой.
В Cobol 68 не было явных ограничителей области видимости, как END-IF. Период также использовался, чтобы закончить область. Кобол 1974 года принес некоторые изменения, которые не имели никакого отношения к периодам.
Вместо того, чтобы пытаться запомнить правила для периодов, программисты на Cobol обычно заканчивали каждое предложение в программе на Cobol точкой.
С введением ограничителей области действия в Cobol 1985 кодеры Cobol могли исключить большинство периодов в параграфе разделов процедуры. Единственные периоды, требуемые при разделении процедур программы Cobol 85, - это завершение оператора PROCEDURE DIVISION, завершение кода (если есть) перед первым заголовком абзаца / раздела, прекращение заголовка абзаца / раздела, завершение абзаца / раздела и прекратить программу (если нет параграфов / разделов).
К сожалению, это взбесило программистов на Cobol, которые закодировали стандарт Cobol 68 и 74. По сей день во многих магазинах Cobol действует правило кодирования, заключающееся в том, что каждое предложение о разделении процедуры заканчивается точкой.
Где использовать!
Есть 2 формы для использования точки.
Вы можете использовать POINT после каждого VERB в РАЗДЕЛЕ. ПРИМЕР:
0000-ПРИМЕР РАЗДЕЛ.
Переместить 0 в WK-I.
ВЫПОЛНИТЕ ДО WK-I БОЛЬШЕ, ЧЕМ 100 ДИСПЛЕЙ WK-I ДОБАВЛЕНО 1 К WK-I END-PERFORM.
DISPLAY WK-I.
ЕСЛИ WK-I РАВНЫЙ НОЛЬ ДИСПЛЕЙ WK-I END-IF.
0000-EXAMEPLE-END. ВЫХОД.
Обратите внимание, что мы используем точку после каждого VERB, ЗА ИСКЛЮЧЕНИЕМ внутри PERFORM, IF, ETC...
Другая форма для использования: ИСПОЛЬЗОВАНИЕ ТОЛЬКО ОДНОЙ ТОЧКИ В КОНЦЕ РАЗДЕЛА, как здесь:
0000-ПРИМЕР РАЗДЕЛ.
ПЕРЕМЕСТИТЬ 0 В WK-I
ВЫПОЛНИТЕ ДО WK-I БОЛЬШЕ, ЧЕМ 100 ОТОБРАЖАЕТ WK-I ДОБАВИТЬ 1 К WK-I КОНЕЦ-ИСПОЛНИТЬ
ДИСПЛЕЙ WK-I
ЕСЛИ WK-I РАВНЫЙ НОЛЬ ДИСПЛЕЙ WK-I END-IF
, <======== укажите здесь!!!!!!! только здесь!
0000-EXAMEPLE-END. ВЫХОД.
НО, мы ВСЕГДА имеем после ВЫХОДА и РАЗДЕЛА.....
Когда это мой выбор, я использую полный останов / период только там, где это необходимо. Однако местные стандарты часто диктуют иное: пусть будет так.
Проблемы, вызванные точными остановками / периодами, заключаются в случайном создании чего-то безусловного, когда код "с" копируется в код "без", в то время как мозг кодера остается в безопасности на стоянке.
Еще одна вещь, на которую стоит обратить внимание - это (надеюсь) "старые" программы, использующие СЛЕДУЮЩУЮ СТОРОНУ в IBM Mainframe Cobol. "СЛЕДУЮЩАЯ ОТПРАВКА" означает "после следующего полного останова / периода", который в коде "разреженного полного останова / периода" является концом абзаца / раздела. Авария в ожидании Получите изменение спецификации, чтобы позволить "СЛЕДУЮЩУЮ СТОРОНУ" изменить на "ПРОДОЛЖИТЬ".
Именно «случайное создание чего-то безусловного» является причиной использования точек. Отсутствие точек создает иллюзию контроля и простоты использования, хотя на самом деле все наоборот. Видение точек напрямую говорит вам о том, что вы больше не находитесь в условном коде. Использование точек — одно из незамеченных достоинств COBOL. При перемещении кода в условный код и из него еще более важно понимать, что вы меняете код таким образом, что это влияет на поток, без учета отступов. Выполнение этих строк потенциально может измениться независимо от того, измените ли вы что-либо непосредственно в строке. Индикаторы объема END также хороши, как и периоды.
Просто протестировал это в моей программе cobol 85, удалив все точки в процедурах, и он работал нормально.
пример:
PROCEDURE DIVISION.
MAIN-PROCESS.
READ DISK-IN
AT END
DISPLAY "NO RECORDS ON INPUT FILE"
STOP RUN
ADD 1 TO READ-COUNT.
PERFORM PROCESS-1 UNTIL END-OF-FILE.
WRITE-HEADER.
MOVE HEADER-INJ-1 TO HEADER-OUT-1
WRITE HEADER-OUT-1.
CLOSE-FILES.
CLOSE DISK-IN
CLOSE DISK-OUT
DISPLAY "READ: " READ-COUNT
DISPLAY "WRITTEN: " WRITE-COUNT
SORT SORT-FILE ON ASCENDING SER-S
USING DISK-OUT
GIVING DISK-OUT
STOP RUN.