Cobol的光明面是什么?

时间:2009-04-05 15:40:01

标签: language-features cobol

我喜欢花时间研究语言的酷炫功能,即使我很快就没有机会使用它们,但只听到Cobol的坏事,但我敢肯定它必须有一些不错的功能因为它变得和它一样重要。那么从Cobol可以学到什么好的功能呢?

16 个答案:

答案 0 :(得分:12)

以不太简洁的方式编写公式的能力。例如:

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

这是优势还是劣势?取决于你如何看待它......

答案 1 :(得分:9)

真正的定点变量和数学。因此,对于15美元和75美分,您的内部表示是二进制数字1,5,7和5.这是与标准浮点近似的精确表示。此外,该定点变量的所有加法和减法也是定点的。

Report Writer扩展程序非常擅长生成报告和处理页眉,页脚,分页符,分节符以及与生成报告有关的任何内容。

Sort / Merge扩展也非常非常好。使用各种允许的构造,您可以简单地排序/合并,或者您可以在排序后排序或排序输出之前处理排序输入记录。例如,直接输入输入记录进行排序,然后在排序记录上使用Report Writer,而无需在代码中管理中间排序文件。很好。

它做得很好,它做得很好。只是在大多数情况下,它做得很好并不完全是你需要的。

答案 2 :(得分:8)

长寿。我在1975年首次学习的语言可用于今天的Web服务。

另外,COBOL有一个我听到人们每天都要求的功能。给定两个具有相同名称字段的记录,您可以这样做:

MOVE CORRESPONDING SOURCE-RECORD TO DESTINATION-RECORD.

它会将具有相同名称的字段从一个字段移动到另一个字段,并根据需要进行转换。缺少这样的功能是人们采用数据传输对象从Web服务返回的方式之一 - 您必须编写代码来手动执行上述操作,或者使用代码生成。

我认为可能还有ADD CORRESPONDING,但我不确定。经过一段时间后,记忆开始消失......

答案 3 :(得分:5)

输出格式为part of the variable declaration。它非常注重业务。

  

在COBOL中,变量声明   由DATA中的一行组成   DIVISION包含以下内容   项目:

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

可以为a分配起始值   变量通过扩展到   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.

答案 4 :(得分:5)

支持精确数学的压缩小数;

内置索引文件/排序;

成熟的编译器;

它有点冗长,但它完成了工作。

答案 5 :(得分:5)

哦,我怎么能忘记......

而不是:

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

答案 6 :(得分:4)

数据结构化功能与固定长度字段一样好。

ALTER彻头彻尾的弯腰。也许不适合在生产代码中使用,但玩起来很有趣。基本上,它允许您在运行时更改其他语句(插入GOTO)后的语句。

答案 7 :(得分:4)

MOVE CORRESPONDING

假设您在C#中有两个类,它们有一些共同的字段,例如,A类有Name,Age和Sex,还有一些其他字段...... B类有相同的3个字段,还有一些其他字段它自己的。复制字段的唯一方法是:

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

在COBOL中,你只需写:

MOVE CORRESPONDING A TO B

答案 8 :(得分:3)

这很容易学习。我生命中只编写了两个COBOL程序(将COBOL ISAM文件解压缩成不同的格式),并且在一个下午的书的帮助下,我学会了所有我需要知道的事情。

哦,它会给你的大脑留下正确的“环境”一词的拼写。

答案 9 :(得分:3)

1)。简单易学。 2)。语法更像英语,因此即使对于初学者也很容易理解程序逻辑。

答案 10 :(得分:3)

在声明变量时,它也有一个有趣的功能......在声明变量的位置,你也可以声明变量的一些可能的并用布尔值标记它们。你可以使用

IF [boolean_label]

而不是

IF [variable] IS [value]

如果值不是特别有意义(即魔术数字甚至魔术字符串),这是特别好的......这些魔术值只出现在变量的声明中,并且很好地标记了它们的含义。

您甚至可以将>变量设置为以下值之一:

SET [boolean_label] TO TRUE

答案 11 :(得分:2)

答案 12 :(得分:2)

Sun(现在是甲骨文)的人可能会对我生气,但是FORTRAN和COBOL是第一次尝试写一次,运行任何语言。 IBM添加了对COBOL语言的扩展,这几乎使COBOL的尝试无效。

在COBOL和FORTRAN之前,计算机语言是特定于机器的。计算机非常昂贵,每次升级计算机时重写代码都会更便宜。 IBM在20世纪50年代末意识到,创建和维护一致的计算机体系结构可以为客户节省资金(并增加计算机系统的市场)。这就是IBM开发360系列计算机的原因。

同样,客户意识到每台新机器的重写软件都变得过于昂贵。 IBM开发了FORTRAN的开端,而Grace Hopper和联邦政府推动了COBOL的开发。这解释了为什么IBM将所有这些专有扩展添加到COBOL。联邦政府的参与也解释了为什么COBOL是一种冗长的语言。

答案 13 :(得分:1)

COBOL非常适合格式化输出。输出字段如下所示:

TOTAL-PAY PIC $$$,$$$。99

会在值旁边打印$ right。它最高可达99,999.99美元。如果价值仅为150美元,则会打印150.00美元。此外,通常有一个COBOL函数可以将这个数量转换为单词 - “一百五十美元而不是一个帐户”

答案 14 :(得分:1)

您还可以重新定义记录以允许处理多种记录类型的文本文件。

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.

答案 15 :(得分:0)

另一个优点是......如果你在大型机上编程,你几乎可以肯定COBOL可用......对任何其他语言都不适用。它有点像大型机的C。