📜  COBOL 中的变量

📅  最后修改于: 2022-05-13 01:54:39.313000             🧑  作者: Mango

COBOL 中的变量

对于程序员来说,声明和初始化变量可能很简单。但是,如果这是您的第一种编程语言,请将变量视为一个容器,您可以在其中填充未知数量 - 所述数据类型的值。根据它的用途,这个变量的值然后被存储在一个特定的内存地址,并且可以根据程序员选择的变量名称进行访问。现在,当我们使用一个变量时,我们声明并经常使用一个值来初始化它,该值可以是 boolean、 字符串、int 或 double 类型。最重要的是,我们使用描述性名称,以便我们知道该变量的用途。

例如,在强类型语言Java,我们将使用以下语法:

Java
int loopCounter = 0;


Python3
loopCounter = 0


Cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. DISPLAY-RANDOM-NUMBER.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    01 NumberOne PIC 9 VALUE 2.


Cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. DISPLAY-RANDOM-NUMBER.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    01 NumberOne PIC 9 VALUE 2.


Cobol
01 NumberOne PIC 9 VALUE 2.


Cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. DISPLAY-STUDENT-INFO.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    01 StudentInfo.
        03 MyName PIC A(30) VALUE "My Name".
        03 MyStudentID PIC X(8) VALUE "FN107001".
        03 MyCGPA PIC 9(2)V9(2) VALUE 3.54.


Cobol
01 NumberOne PIC 9 VALUE 2.


Cobol
01 NumberOne PIC 9 VALUE 2.


Cobol
01 NumberTwo PIC 99 VALUE 22.
01 NumberThree PIC 9(2) VALUE 22.


Cobol
01 NumberFour PIC S9(2) VALUE -32.
01 NumberFive PIC 9(2)V9(2) VALUE 21.65.


Cobol
01 NumberOne PIC 9 VALUE 2.


Cobol
03 MyName PIC A(30) VALUE "My Name".
03 MyStudentID PIC X(8) VALUE "FN107001".
03 MyCGPA PIC 9(2)V9(2) VALUE 3.54.


Cobol
01 NumberOne PIC 9 VALUE 2.


Cobol
01 myvar PIC X(10) VALUE ZEROES.


Cobol
01 myvar PIC X(20) VALUE SPACES.


Cobol
01 myvar PIC X(10) VALUE ZEROES.
01 myvar2 PIC X(10) VALUE "0000000000".


Cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. DISPLAY-STUDENT-INFO.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    01 eName PIC A(12) VALUE "Rahul Biswas".
    01 Occupation PIC A(10) VALUE "Programmer".
    01 EmployeeID PIC X(10) VALUE "MSFT107001".
    01 Salary PIC 9(2)V9(2) VALUE 3.23.
PROCEDURE DIVISION.
    DISPLAY "My Name:" eName
    DISPLAY "My Occupation: " Occupation
    DISPLAY "Employee ID: " EmployeeID
    DISPLAY "My CGPA: " Salary
    STOP RUN.
END PROGRAM DISPLAY-STUDENT-INFO.


相比之下,在松散类型语言Python,我们使用没有数据类型的语法来做同样的事情:

蟒蛇3



loopCounter = 0

在 COBOL 中,这几乎是一样的。特别是如果我们想声明和初始化用于计算的变量。

也就是说,我们在 COBOL 中将变量称为数据项,并且为了在学习这种语言时遵循传统上接受的术语,我们也会这样做。

COBOL 变量介绍

虽然在流行的语言中,我们通常在代码中使用变量之前声明和初始化变量,但这个过程在 COBOL 中更为正式,因为它必须在程序的特定区域中声明。

鉴于一个 COBOL 程序分为四个部分,我们必须寻找属于数据部分的工作存储部分。这是您将在程序中添加 COBOL 数据项(我们通常称为变量)的地方。

科博尔

IDENTIFICATION DIVISION.
PROGRAM-ID. DISPLAY-RANDOM-NUMBER.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    01 NumberOne PIC 9 VALUE 2.

说到这一点,COBOL 也可以处理诸如字面量和比喻常量之类的数据,我们将在以下部分中讨论这些内容。

科博尔

IDENTIFICATION DIVISION.
PROGRAM-ID. DISPLAY-RANDOM-NUMBER.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    01 NumberOne PIC 9 VALUE 2.

很简单,它由包含唯一级别 (01) 和名称 (NumberOne)、数据类别 (PIC 9) 和可选值 (VALUE 2) 的部分组成。



让我们在下一节中检查 COBOL 声明中的每个部分。

COBOL 语法中的变量

即使COBOL采用的语法看起来很难,但实际上非常简单。必须记住,这种语言是在不同的时间开发的,所以它可能看起来不同。

因此,让我们尽可能简单地分解每个部分,从数据项级别编号 01 开始:

科博尔

01 NumberOne PIC 9 VALUE 2.

数据项由级别编号表示,可用于将较低级别的项目分组到较高级别的项目下,如下所示:

科博尔

IDENTIFICATION DIVISION.
PROGRAM-ID. DISPLAY-STUDENT-INFO.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    01 StudentInfo.
        03 MyName PIC A(30) VALUE "My Name".
        03 MyStudentID PIC X(8) VALUE "FN107001".
        03 MyCGPA PIC 9(2)V9(2) VALUE 3.54.

显然,级别编号为 03 的数据项可以分组到标记为 StudentInfo 的级别编号为 01 的数据项下。

虽然您可以选择 1-49 之间的数字来为您的数据项提供层次感,但必须指出的是,级别编号 01 是最顶层的。这是我们在 COBOL 程序中声明每个数据项时将使用的。

科博尔

01 NumberOne PIC 9 VALUE 2.

我们现在识别为变量名的是 COBOL 中所指的数据名。与流行语言中的变量命名一样,当涉及到 COBOL 数据名称时,请记住以下一些规则:



  1. 数据名称可以使用字母 az 和 AZ 以及 0-9 之间的数字。连字符也是允许的。
  2. 一个数据名字可以采取字符的最大数量为30字符。
  3. 每个数据名称必须至少有一个字母
  4. 连字符不能用于开始或结束数据名称。
  5. 数据名不能是“保留字”。这些关键字在 COBOL 中执行某些功能。保留字的示例包括 MULTIPLY、COUNT、FOR、ELSE、DISPLAY 和 ACCESS。

当您牢记这些规则时,请记住您选择的数据名称应描述该变量包含或将用于什么。

科博尔

01 NumberOne PIC 9 VALUE 2.

接下来,我们看一下图片子句 (PIC 9),它定义了项目的数据类型和大小。简而言之,系统会获得此声明的“图片”。它用作模板或示例。查看上面的子句,符号 9 通知编译器它应该只接受一位整数。

现在,如果您希望系统接受两位数怎么办?这是声明:

科博尔

01 NumberTwo PIC 99 VALUE 22.
01 NumberThree PIC 9(2) VALUE 22.

这两个声明同样可以接受,因为它们将为NumberTwoNumberThree数据名称存储值 22。同样,我们使用“S”和“V”符号来表示符号和小数位,如下图:

科博尔

01 NumberFour PIC S9(2) VALUE -32.
01 NumberFive PIC 9(2)V9(2) VALUE 21.65.

最后,我们使用 VALUE 关键字为数据名称赋值,如下所示:

科博尔

01 NumberOne PIC 9 VALUE 2.

当然,除了数字类型之外,还可以声明其他类型的数据,例如 Alphabetic 和 Alphanumeric 类型。使用前面的示例,以下是其他示例:



科博尔

03 MyName PIC A(30) VALUE "My Name".
03 MyStudentID PIC X(8) VALUE "FN107001".
03 MyCGPA PIC 9(2)V9(2) VALUE 3.54.

正如我们在上面看到的,PIC A 用于声明字母数据项,而 PIC X 用于声明字母数字数据项。通常,每个括号内的值表示需要为该数据项分配的数字或字符数。

花一些时间比较分配给数据名称的值,您将了解如何将图片子句用于所有三种类型的数据项。

话虽如此,在 COBOL 中声明和初始化数据项时,请不要忘记每个声明后的句号。

COBOL 中的字面量量

根据定义,COBOL 中的字面量仅仅是我们将与数据项关联的值。这是使用的最简单的数据类别。根据之前使用的示例和如下所示,分配给 NumberOne 的值 2 是字面量。

科博尔

01 NumberOne PIC 9 VALUE 2.

现在,COBOL 中有两种类型的字面量:数字和字母数字字面量。

正如您所猜测的,数字字面量只是数字,就像上面显示的值一样。数字字面量的其他示例包括 -3 和 34.21。换句话说,数字字面量也包含符号和小数。

另一方面,字母数字字面量是包含字母和数字或两者之一的值。字母数字字面量通常用引号括起来。字母数字字面量的示例包括“-321”、“3.24”、“34”、“ans425”和“answer”。

关于字面量必须记住的一件事:您不必在 COBOL 程序的数据部门中声明它们,而是将它们直接添加到过程部门。这就是在声明数据项时 VALUE 被认为是可选的原因。



COBOL 中的图形常量

现在,有时使用字面量来初始化数据项可能不相关或不必要。例如,您可能只想用任意的零序列填充数据项。您可以执行以下操作:

科博尔

01 myvar PIC X(10) VALUE ZEROES.

或者,如果数据项需要根据数据项的大小填充其他字符,例如引号、其他 ASCII 值之间的空格。

这就是比喻常量——作为保留字——可能派上用场的地方,它将填充整个项目。用户分配的字面量将无法执行此操作。

科博尔

01 myvar PIC X(20) VALUE SPACES.

比喻常数好的另一个原因是因为它们提供了可读性。如果比较数据项的两个语句,哪个读起来更好?

科博尔

01 myvar PIC X(10) VALUE ZEROES.
01 myvar2 PIC X(10) VALUE "0000000000".

出于显而易见的原因,第一个语句使用的形式似乎比第二个更好。

示例:运行示例 COBOL 程序

现在,在学习编码时,肌肉记忆非常重要。我们不能仅通过阅读来学习编程,还必须尝试示例 COBOL 程序。以下是显示特定员工详细信息的 COBOL 程序示例:

科博尔

IDENTIFICATION DIVISION.
PROGRAM-ID. DISPLAY-STUDENT-INFO.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    01 eName PIC A(12) VALUE "Rahul Biswas".
    01 Occupation PIC A(10) VALUE "Programmer".
    01 EmployeeID PIC X(10) VALUE "MSFT107001".
    01 Salary PIC 9(2)V9(2) VALUE 3.23.
PROCEDURE DIVISION.
    DISPLAY "My Name:" eName
    DISPLAY "My Occupation: " Occupation
    DISPLAY "Employee ID: " EmployeeID
    DISPLAY "My CGPA: " Salary
    STOP RUN.
END PROGRAM DISPLAY-STUDENT-INFO.

输出:

My Name:Rahul Biswas
My Occupation: Programmer
Employee ID: MSFT107001
My CGPA: 03.23

最后一件事:环境划分虽然在本示例中不是必需的,但放置只是为了向您展示 COBOL 程序的四个划分的顺序。

话虽如此,我们对 COBOL 变量的介绍现在已经结束。或者正如他们所说的:数据项。