代码之家  ›  专栏  ›  技术社区  ›  Robert Gould

COBOL的优点是什么?[关闭]

  •  8
  • Robert Gould  · 技术社区  · 16 年前

    我喜欢花时间研究语言的酷特性,即使我很快就没有机会使用它们,但我只会一直听到关于COBOL的坏消息,但我相信它一定有一些好的特性,使它变得和以前一样重要。那么,从COBOL中可以学到哪些好的特性呢?

    16 回复  |  直到 16 年前
        1
  •  12
  •   RCIX    15 年前

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

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

    它是优势还是劣势?看你怎么看…

        2
  •  9
  •   jame    16 年前

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

    报表编写器扩展非常擅长生成报表和处理页眉、页脚、分页符、分节符,以及与生成报表有关的任何内容。

    排序/合并扩展也非常非常好。使用各种允许的构造,您可以简单地排序/合并,或者在排序之前处理排序输入记录,或者在排序之后排序输出。例如,直接将输入记录送入排序,但在排序的记录上使用报表编写器,而不必在代码中管理中间排序的文件。很不错的。

    做得好,做得很好。只是大部分时间,它做得好的并不完全是你需要的。

        3
  •  8
  •   John Saunders    16 年前

    长寿。我在1975年第一次学习的语言现在可以用来使用Web服务。

    此外,COBOL还有一个我每天都会听到人们要求的特性。如果两个记录的字段具有相同的名称,则可以执行以下操作:

    MOVE CORRESPONDING SOURCE-RECORD TO DESTINATION-RECORD.
    

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

    我想可能有一个 ADD CORRESPONDING 当然,但我不确定。记忆开始消失,过了一会儿…

        4
  •  5
  •   Thomas L Holaday    16 年前

    输出格式为 part of the variable declaration . 它非常以商业为导向。

    在COBOL语言中,一种变量声明。 由数据中的一行组成 包含以下内容的分区 项目:

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

    起始值可以分配给 通过扩展到 picture子句调用了值 条款。

    一些例子:

    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.
    
        5
  •  5
  •   EvilTeach    16 年前

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

    内置索引文件/排序;

    成熟的编译器;

    这有点冗长,但能完成任务。

        6
  •  5
  •   JoelFan    16 年前

    哦,我怎么能忘记…

    而不是:

    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
    
        7
  •  4
  •   Andru Luvisi    16 年前

    对于固定长度的字段,数据结构特性几乎与之相同。

    改变是完全正确的思想弯曲。也许不适合在生产代码中使用,但是玩起来很有趣。基本上,它允许您在运行时更改哪些语句跟随其他语句(insert goto)。

        8
  •  4
  •   JoelFan    16 年前
    MOVE CORRESPONDING
    

    假设您在C中有两个类,它们有一些共同的字段,例如,A类有名称、年龄和性别,还有一些其他字段…B类有相同的3个字段,加上它自己的一些字段。复制字段的唯一方法是:

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

    在COBOL中,您只需编写:

    MOVE CORRESPONDING A TO B
    
        9
  •  3
  •   anon    16 年前

    这很容易学。我一生中只写过两个COBOL程序(将COBOL ISAM文件解包成不同的格式),在一个下午的帮助下,我学会了做这件事所需要知道的一切。

    哦,它会让你的大脑记住“环境”这个词的正确拼写。

        10
  •  3
  •   kishore    16 年前

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

        11
  •  3
  •   JoelFan    16 年前

    它在声明变量时还有一个有趣的特性…在变量的声明位置,也可以声明一些可能的 价值观 并用布尔值标记它们。你可以使用

    IF [boolean_label]
    

    而不是

    IF [variable] IS [value]
    

    如果这些值没有特别的意义(例如,幻数甚至是幻弦),这就特别好了……这些神奇的值只出现在变量的声明中,并用它们的含义进行了很好的标记。

    你甚至可以 设置 变量设置为以下值之一:

    SET [boolean_label] TO TRUE
    
        13
  •  2
  •   Gilbert Le Blanc    15 年前

    Sun的员工(现在是Oracle)可能会生我的气,但Fortran和COBOL是第一批尝试一次性编写、运行任何语言的人。IBM增加了对COBOL语言的扩展,几乎使COBOL的尝试无效。

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

    以同样的方式,客户意识到为每台新机器重写软件的成本太高了。IBM开发了Fortran,而Grace Hopper和联邦政府则推动了COBOL的开发。这就解释了为什么IBM在COBOL中添加了所有这些专有扩展。联邦政府的参与也解释了为什么COBOL是如此冗长的语言。

        14
  •  1
  •   Cathy Sullivan    16 年前

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

    支付总额:pic$$$和$$.99

    将在值旁边打印美元。它将打印高达99999.99美元。如果价值只有150美元,它将打印150美元。此外,通常还有一个COBOL函数,它可以将这个值转换为单词“一百五十美元零美分”。

        15
  •  1
  •   tonyriddle    16 年前

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

    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.
    
        16
  •  0
  •   JoelFan    16 年前

    另一个优势…如果您是在大型机上编程的,那么您几乎可以肯定COBOL将是可用的……其他语言都不是这样。有点像主机的C。

    推荐文章