Какова светлая сторона Кобола?

Я люблю проводить время, исследуя интересные особенности языков, даже если у меня не будет возможности использовать их в ближайшее время, но продолжаю слышать только плохие отзывы о Коболе, но я уверен, что у него должны быть какие-то приятные особенности, чтобы он мог работать. стать таким же важным, как и раньше. Итак, какие полезные функции можно почерпнуть из Cobol?


person Robert Gould    schedule 05.04.2009    source источник


Ответы (16)


Способность писать формулы менее сжато. Например:

ADD YEARS TO AGE.
MULTIPLY PRICE BY QUANTITY GIVING COST.
SUBTRACT DISCOUNT FROM COST GIVING FINAL-COST.

Это преимущество или недостаток? Зависит от того, как ты смотришь на это...

person Konstantin Tarkus    schedule 05.04.2009
comment
Пожалуйста, цитируйте любые цитаты - спасибо! - person Andrew Hare; 05.04.2009
comment
Вырвано из Википедии Я знаю, как странно ссылаться на Википедию. Просто звучит не очень :) - person Peter Perháč; 06.04.2009
comment
Помимо того, что цитата из Википедии является полной ерундой, она дважды упоминается без ссылки. Я уже знал, что Википедия может быть довольно посредственной, но это колонка светской хроники или что? - person stevenvh; 13.04.2009
comment
ВЫЧИСЛИТЕ ОКОНЧАТЕЛЬНУЮ СТОИМОСТЬ = (СТОИМОСТЬ * КОЛИЧЕСТВО) - СКИДКА. Это немного более реальный мир и узнаваемый. - person tonyriddle; 30.04.2009
comment
Этот ответ должен быть забавным или что? Кажется, это язвительный удар по COBOL, но, возможно, я что-то упускаю. - person Sean McMillan; 17.09.2009
comment
Я просмотрел статью в Википедии и не увидел ничего подобного, поэтому вырезал цитату. - person RCIX; 02.01.2010

Истинные переменные с фиксированной точкой и математика. Итак, для 15 долларов и 75 центов вашим внутренним представлением были двоичные цифры 1, 5, 7 и 5. Это было точное представление по сравнению со стандартным приближением с плавающей запятой. Кроме того, все операции сложения и вычитания этой переменной с фиксированной точкой также выполнялись с фиксированной точкой.

Расширение Report Writer очень хорошо справлялось с созданием отчетов и обработкой верхних и нижних колонтитулов, разрывов страниц, разрывов разделов и почти всего, что связано с созданием отчетов.

Расширение Sort/Merge также было очень и очень хорошим. С разнообразием допустимых конструкций вы можете просто сортировать/объединять, или вы можете обрабатывать входные записи сортировки перед сортировкой или сортировать выходные данные после сортировки. Например, передайте входные записи непосредственно для сортировки, а затем используйте Report Writer для отсортированных записей без необходимости управлять промежуточным отсортированным файлом в коде. Очень хорошо.

То, что получилось хорошо, получилось очень хорошо. Просто в большинстве случаев то, что получилось хорошо, не совсем то, что вам нужно.

person Community    schedule 05.04.2009

Долголетие. Язык, который я впервые выучил в 1975 году, сегодня можно использовать для работы с веб-сервисами.

Кроме того, в COBOL есть функция, о которой люди просят каждый день. Учитывая две записи, имеющие поля с одинаковыми именами, вы можете сделать:

MOVE CORRESPONDING SOURCE-RECORD TO DESTINATION-RECORD.

и он будет перемещать поля с одинаковыми именами из одного в другое, выполняя преобразования по мере необходимости. Отсутствие такой функции является одним из препятствий на пути людей, использующих объекты передачи данных для возврата из веб-сервисов — вам нужно написать код, чтобы сделать это вручную, или использовать генерацию кода.

Я думаю, что мог быть и ADD CORRESPONDING, но я не уверен. Память начинает уходить, через какое-то время...

person John Saunders    schedule 05.04.2009

Формат вывода — часть объявления переменной. Он очень ориентирован на бизнес.

В COBOL объявление переменной состоит из строки в DATA DIVISION, которая содержит следующие элементы:

* A level number.
* A data-name or identifier.
* A Picture clause.

Начальное значение может быть присвоено переменной с помощью расширения предложения PICTURE, называемого предложением VALUE.

Некоторые примеры:

01 GrossPay       PIC 9(5)V99 VALUE ZEROS.

01 NetPay         PIC 9(5)V99 VALUE ZEROS.

01 CustomerName   PIC X(20) VALUE SPACES.

01 CustDiscount   PIC V99 VALUE .25.
person Thomas L Holaday    schedule 05.04.2009
comment
Я также видел, как эти предложения PICTURE использовались для фактического определения форматов файлов... даже для использования языками, отличными от COBOL. - person JoelFan; 07.04.2009

Поддержка упакованного десятичного числа для точной математики;

Встроенные индексированные файлы/сортировка;

Зрелые компиляторы;

Это немного многословно, но выполняет свою работу.

person EvilTeach    schedule 05.04.2009

О, как я мог забыть...

Вместо:

if ((a == 3) || (a == 4) || (a == 10))

записывать:

IF A IS 3 OR 4 OR 10

Вместо:

if ((a == 3) || (a < b))

записывать:

IF A IS 3 OR LESS THAN B

Вместо:

if ((a >= 3)  && (a <= 10))

записывать:

IF A IS BETWEEN 3 AND 10
person JoelFan    schedule 06.04.2009
comment
проблема с этими крутыми условиями в том, что их чертовски сложно анализировать... в прошлый раз, когда я проверял, нет возможности скомпилировать кобол с помощью генератора синтаксических анализаторов... все это должно быть создано вручную - person JoelFan; 06.04.2009

Возможности структурирования данных так же хороши, как и для полей фиксированной длины.

ALTER просто сводит с ума. Возможно, это не очень хорошо для использования в производственном коде, но с ним весело играть. По сути, это позволяет вам изменять, какие операторы следуют за какими другими операторами (вставлять GOTO) во время выполнения.

person Andru Luvisi    schedule 05.04.2009
comment
Alter — самый умопомрачительный WTF всех времен. Но я согласен, если вы не занимаетесь производственным кодом, с ним весело играть. - person Joe Zitzelberger; 15.03.2011

1). Легко учить. 2). Синтаксис больше похож на английский, поэтому логику программы легко понять даже новичкам.

person kishore    schedule 06.04.2009

MOVE CORRESPONDING

Скажем, у вас есть 2 класса в C#, у которых есть некоторые общие поля, например, класс A имеет имя, возраст и пол, а также некоторые другие поля... класс B имеет те же самые 3 поля, а также некоторые другие свои собственные. Единственный способ скопировать поля:

a.Name = b.Name;
a.Age = b.Age;
a.Sex = b.Sex;

В COBOL вы просто пишете:

MOVE CORRESPONDING A TO B
person JoelFan    schedule 06.04.2009
comment
Вы можете сделать это на С# с вызовом интерфейса и метода. - person Silvercode; 21.08.2009

Этому очень легко научиться. За свою жизнь я написал только две программы на COBOL (для распаковки файлов COBOL ISAM в другой формат), и я выучил все, что мне нужно было для этого, с помощью книги за полдня.

О, и это отпечатает в вашем мозгу правильное написание слова «окружающая среда».

person Community    schedule 05.04.2009

У него также есть интересная особенность при объявлении переменных... в месте объявления переменной вы также можете объявить некоторые возможные значения переменной и пометить их логическими значениями. Вы можете использовать

IF [boolean_label]

вместо

IF [variable] IS [value]

что особенно приятно, если значения не имеют особого смысла (например, магические числа или даже магические строки)... эти магические значения появляются только в объявлении переменной и хорошо помечены тем, что они означают.

Вы даже можете установить переменную в одно из этих значений с помощью:

SET [boolean_label] TO TRUE
person JoelFan    schedule 06.04.2009
comment
Я не понимаю этого :/ - person Robert Gould; 06.04.2009
comment
home.swbell.net/mck9/cobol/style/88.html - person JoelFan; 06.04.2009
comment
Это использовалось так же, как мы используем перечисления сегодня. - person John Saunders; 05.09.2013


Люди из Sun (теперь Oracle), вероятно, разозлятся на меня, но FORTRAN и COBOL были первыми попытками написать один раз и работать где угодно. IBM добавила расширения к языку COBOL, которые в значительной степени свели на нет попытки создания COBOL.

До COBOL и FORTRAN компьютерные языки были специфичны для машин. Компьютеры были настолько дорогими, что было дешевле переписывать код каждый раз, когда вы обновляли компьютер. В конце 1950-х IBM осознала, что создание и поддержка согласованной компьютерной архитектуры сэкономит деньги клиентов (и увеличит рынок компьютерных систем). Вот почему IBM разработала серию компьютеров 360.

Точно так же клиенты поняли, что переписывать программное обеспечение для каждой новой машины становится слишком дорого. IBM разработала основы FORTRAN, а Грейс Хоппер и федеральное правительство занимались разработкой COBOL. Это объясняет, почему IBM добавила все эти проприетарные расширения в COBOL. Участие федерального правительства также объясняет, почему язык COBOL такой многословный.

person Gilbert Le Blanc    schedule 16.05.2010
comment
Федеральное правительство США не было движущей силой разработки COBOL. Прочтите раздел «История» статьи Википедии. - person John Saunders; 05.09.2013
comment
@John Saunders: Из вашей ссылки в Википедии: Спецификация COBOL была создана комитетом исследователей из частного сектора, университетов и правительства во второй половине 1959 года. Спецификации в значительной степени были вдохновлены язык FLOW-MATIC, изобретенный Грейс Хоппер, обычно называемый матерью языка COBOL. Грейс Хоппер была контр-адмиралом ВМС США. Участие федерального правительства США. КЭД - person Gilbert Le Blanc; 05.09.2013
comment
Обратите также внимание на шесть компьютерных компаний против трех правительственных учреждений и обратите внимание, кто входил в подкомитет, который занимался большей частью определения языка. COBOL — это не Ада. - person John Saunders; 05.09.2013

COBOL отлично подходит для форматирования вывода. Поле вывода, которое выглядит так:

ПОЛНАЯ ОПЛАТА PIC $$$,$$$.99

будет печатать $ прямо рядом со значением. Он будет печатать до 99 999,99 долларов. Если бы значение было всего 150 долларов, было бы напечатано 150,00 долларов. Кроме того, обычно существует функция COBOL, которая преобразует эту сумму в слова — «СТО ПЯТЬДЕСЯТ ДОЛЛАРОВ И НИКАКИХ ЦЕНТОВ».

person Cathy Sullivan    schedule 07.04.2009
comment
Я написал одну из этих функций. Не только в COBOL, но и в неудачной попытке DEC объединить COBOL и BASIC (представьте COBOL без всех слов) под названием DIBOL (бизнес-ориентированный язык DIgital) - person David; 29.05.2009

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

01 my-address-record.
   02 my-record-type      pic x.
   02 my-street           pic x(20).
   02 my-city             pic x(20).
   02 my-state            pic x(2).
   02 my-zip              pic x(5).
   02 filler              pic x(3).
01 my-comments-record redefines my-address-record.
   02 filler              pic x.
   02 my-comments         pic x(50).
01 my-automobiles redefines my-address-record.
   02 filler              pic x.
   02 year                pic 9(4).
   02 make                pic x(20).
   02 model               pic x(20).
   02 filler              pic x(6).


--code--
if my-record-type = 'a'
   ... process address
else if my-record-type = 'b'
   ... process comments
else if my-record-type = 'c'
   ... process automobiles.
person tonyriddle    schedule 30.04.2009
comment
Извините, но COBOL в нижнем регистре выглядит неправильно :-) - person Alistair Ward; 10.06.2009

Еще одно преимущество... если вы программируете на мэйнфрейме, вы можете быть практически уверены, что COBOL будет доступен... но не для других языков. Это что-то вроде C мейнфрейма.

person JoelFan    schedule 06.04.2009