Я люблю проводить время, исследуя интересные особенности языков, даже если у меня не будет возможности использовать их в ближайшее время, но продолжаю слышать только плохие отзывы о Коболе, но я уверен, что у него должны быть какие-то приятные особенности, чтобы он мог работать. стать таким же важным, как и раньше. Итак, какие полезные функции можно почерпнуть из Cobol?
Какова светлая сторона Кобола?
Ответы (16)
Способность писать формулы менее сжато. Например:
ADD YEARS TO AGE.
MULTIPLY PRICE BY QUANTITY GIVING COST.
SUBTRACT DISCOUNT FROM COST GIVING FINAL-COST.
Это преимущество или недостаток? Зависит от того, как ты смотришь на это...
Истинные переменные с фиксированной точкой и математика. Итак, для 15 долларов и 75 центов вашим внутренним представлением были двоичные цифры 1, 5, 7 и 5. Это было точное представление по сравнению со стандартным приближением с плавающей запятой. Кроме того, все операции сложения и вычитания этой переменной с фиксированной точкой также выполнялись с фиксированной точкой.
Расширение Report Writer очень хорошо справлялось с созданием отчетов и обработкой верхних и нижних колонтитулов, разрывов страниц, разрывов разделов и почти всего, что связано с созданием отчетов.
Расширение Sort/Merge также было очень и очень хорошим. С разнообразием допустимых конструкций вы можете просто сортировать/объединять, или вы можете обрабатывать входные записи сортировки перед сортировкой или сортировать выходные данные после сортировки. Например, передайте входные записи непосредственно для сортировки, а затем используйте Report Writer для отсортированных записей без необходимости управлять промежуточным отсортированным файлом в коде. Очень хорошо.
То, что получилось хорошо, получилось очень хорошо. Просто в большинстве случаев то, что получилось хорошо, не совсем то, что вам нужно.
Долголетие. Язык, который я впервые выучил в 1975 году, сегодня можно использовать для работы с веб-сервисами.
Кроме того, в COBOL есть функция, о которой люди просят каждый день. Учитывая две записи, имеющие поля с одинаковыми именами, вы можете сделать:
MOVE CORRESPONDING SOURCE-RECORD TO DESTINATION-RECORD.
и он будет перемещать поля с одинаковыми именами из одного в другое, выполняя преобразования по мере необходимости. Отсутствие такой функции является одним из препятствий на пути людей, использующих объекты передачи данных для возврата из веб-сервисов — вам нужно написать код, чтобы сделать это вручную, или использовать генерацию кода.
Я думаю, что мог быть и ADD CORRESPONDING
, но я не уверен. Память начинает уходить, через какое-то время...
Формат вывода — часть объявления переменной. Он очень ориентирован на бизнес.
В 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.
Поддержка упакованного десятичного числа для точной математики;
Встроенные индексированные файлы/сортировка;
Зрелые компиляторы;
Это немного многословно, но выполняет свою работу.
О, как я мог забыть...
Вместо:
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
Возможности структурирования данных так же хороши, как и для полей фиксированной длины.
ALTER просто сводит с ума. Возможно, это не очень хорошо для использования в производственном коде, но с ним весело играть. По сути, это позволяет вам изменять, какие операторы следуют за какими другими операторами (вставлять GOTO) во время выполнения.
1). Легко учить. 2). Синтаксис больше похож на английский, поэтому логику программы легко понять даже новичкам.
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
Этому очень легко научиться. За свою жизнь я написал только две программы на COBOL (для распаковки файлов COBOL ISAM в другой формат), и я выучил все, что мне нужно было для этого, с помощью книги за полдня.
О, и это отпечатает в вашем мозгу правильное написание слова «окружающая среда».
У него также есть интересная особенность при объявлении переменных... в месте объявления переменной вы также можете объявить некоторые возможные значения переменной и пометить их логическими значениями. Вы можете использовать
IF [boolean_label]
вместо
IF [variable] IS [value]
что особенно приятно, если значения не имеют особого смысла (например, магические числа или даже магические строки)... эти магические значения появляются только в объявлении переменной и хорошо помечены тем, что они означают.
Вы даже можете установить переменную в одно из этих значений с помощью:
SET [boolean_label] TO TRUE
Люди из Sun (теперь Oracle), вероятно, разозлятся на меня, но FORTRAN и COBOL были первыми попытками написать один раз и работать где угодно. IBM добавила расширения к языку COBOL, которые в значительной степени свели на нет попытки создания COBOL.
До COBOL и FORTRAN компьютерные языки были специфичны для машин. Компьютеры были настолько дорогими, что было дешевле переписывать код каждый раз, когда вы обновляли компьютер. В конце 1950-х IBM осознала, что создание и поддержка согласованной компьютерной архитектуры сэкономит деньги клиентов (и увеличит рынок компьютерных систем). Вот почему IBM разработала серию компьютеров 360.
Точно так же клиенты поняли, что переписывать программное обеспечение для каждой новой машины становится слишком дорого. IBM разработала основы FORTRAN, а Грейс Хоппер и федеральное правительство занимались разработкой COBOL. Это объясняет, почему IBM добавила все эти проприетарные расширения в COBOL. Участие федерального правительства также объясняет, почему язык COBOL такой многословный.
COBOL отлично подходит для форматирования вывода. Поле вывода, которое выглядит так:
ПОЛНАЯ ОПЛАТА PIC $$$,$$$.99
будет печатать $ прямо рядом со значением. Он будет печатать до 99 999,99 долларов. Если бы значение было всего 150 долларов, было бы напечатано 150,00 долларов. Кроме того, обычно существует функция COBOL, которая преобразует эту сумму в слова — «СТО ПЯТЬДЕСЯТ ДОЛЛАРОВ И НИКАКИХ ЦЕНТОВ».
Вы также можете переопределить записи, чтобы разрешить обработку текстовых файлов с несколькими типами записей.
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.
Еще одно преимущество... если вы программируете на мэйнфрейме, вы можете быть практически уверены, что COBOL будет доступен... но не для других языков. Это что-то вроде C мейнфрейма.