我喜欢花时间研究语言的酷特性,即使我不会很快有机会使用它们,但总是听到关于 Cobol 的坏消息,但我相信它一定有一些不错的特性变得和以前一样重要。那么可以从 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。这是与标准浮点近似值相比的精确表示。此外,该定点变量的所有加法和减法也是定点的。
报告编写器扩展非常擅长生成报告和处理页眉、页脚、分页符、分节符,以及与生成报告有关的任何事情。
排序/合并扩展也非常非常好。使用各种允许的结构,您可以简单地排序/合并,或者您可以在排序之前处理排序输入记录或在排序之后处理排序输出。例如,直接输入输入记录进行排序,然后在排序记录上使用报告编写器,而无需在代码中管理中间排序文件。非常好。
它做得很好,它做得很好。只是大多数时候,它做得好的并不是你所需要的。
长寿。我在 1975 年第一次学习的语言可以用于今天的 Web 服务。
此外,COBOL 有一个我每天都听到人们要求的功能。给定两个具有相同名称字段的记录,您可以执行以下操作:
MOVE CORRESPONDING SOURCE-RECORD TO DESTINATION-RECORD.
它会将具有相同名称的字段从一个移动到另一个,并根据需要进行转换。缺乏这样的功能是人们采用数据传输对象从 Web 服务返回的障碍之一——您必须手动编写代码来完成上述操作,或者使用代码生成。
我想可能也有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
假设您在 C# 中有 2 个类,它们有一些共同的字段,例如,A 类有 Name、Age 和 Sex,以及其他一些字段……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 之前,计算机语言是特定于机器的。计算机非常昂贵,以至于每次升级计算机时重写代码会更便宜。IBM 在 1950 年代后期意识到创建和维护一致的计算机体系结构可以为客户节省资金(并增加计算机系统的市场)。这就是 IBM 开发 360 系列计算机的原因。
同样,客户意识到为每台新机器重写软件变得过于昂贵。IBM 开发了 FORTRAN,而 Grace Hopper 和联邦政府推动了 COBOL 的开发。这就解释了为什么 IBM 将所有这些专有扩展添加到 COBOL。联邦政府的参与也解释了为什么 COBOL 是一种如此冗长的语言。
COBOL 非常适合格式化输出。如下所示的输出字段:
总付费图片 $$$,$$$.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。