我喜欢花时间研究语言的酷炫功能,即使我很快就没有机会使用它们,但只听到Cobol的坏事,但我敢肯定它必须有一些不错的功能因为它变得和它一样重要。那么从Cobol可以学到什么好的功能呢?
答案 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)
It is 50 years old this year, but Cobol is still a key player in behind-the-scenes business software(卫报)
答案 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。