在一行中加入语句

Join statements in a line

我想在我的 NATURAL 程序中在一行中加入一些指令。就像这样:

**before
    Statement1
    Statement2
    Statement3
 **after
    Statemen1 statement2 statement3

我知道在大多数语言中这很容易做到,但我不确定在 Natural 中是否可行。

语言中没有任何限制可以防止将语句放在一行中。例如,这是一行中的整个程序。

DEFINE DATA LOCAL 1 #A (A10) END-DEFINE MOVE 'XX' TO #A WRITE #A END

但是,这真的不是阅读乐趣并且适用于所有语言。下一个必须维护代码的人请记住这一点。

道格拉斯·巴德,英国王牌飞行家等人的名言
“规则是智者的指引,愚者的服从”

我总是说:
“唯一始终有效的规则是没有任何规则始终有效”

在编程中我们有很多有用的规则,其中之一是:
“每条语句另起一行”
...遵循这句格言是明智的,但也有例外。
有时,您实际上可以通过打破规则来提高代码的可读性。

这是一个示例(以自然语言编写):

define data
    local 1     DATE-FROM (D)  /* (D=Natural Date-Format)
          1     DATE-TO   (D)
end-define

    DATE-FROM := *DatX  /* System Variable = "Today"
    DATE-TO   := DATE-FROM + 1
    perform   P800-WRITE-DATE

    DATE-FROM := DATE-TO
    DATE-TO   := DATE-FROM + 2
    perform   P800-WRITE-DATE

    DATE-FROM := DATE-TO
    DATE-TO   := DATE-FROM + 3
    perform   P800-WRITE-DATE

    DATE-FROM := DATE-TO
    DATE-TO   := DATE-FROM + 4
    perform   P800-WRITE-DATE

define subroutine P800-WRITE-DATE
    write  DATE-FROM(em=DD.MM.YYYY)
           DATE-TO  (em=DD.MM.YYYY)
end-subroutine
END

现在,我会把它的执行部分写成如下:

DATE-FROM := *DatX      DATE-TO := DATE-FROM + 1    perform P800-WRITE-DATE
DATE-FROM := DATE-TO    DATE-TO := DATE-FROM + 2    perform P800-WRITE-DATE
DATE-FROM := DATE-TO    DATE-TO := DATE-FROM + 3    perform P800-WRITE-DATE
DATE-FROM := DATE-TO    DATE-TO := DATE-FROM + 4    perform P800-WRITE-DATE

它更容易理解、发现拼写错误和交付质量。

今天的输出是:

28.02.2021  01.03.2021
01.03.2021  03.03.2021
03.03.2021  06.03.2021
06.03.2021  10.03.2021

回到最初的问题:
在 Natural 中,您 可以 以“;”结束语句但 不需要 。以下是完全有效的:

DATE-FROM := *DatX    ;  DATE-TO := DATE-FROM + 1  ;  perform P800-WRITE-DATE;
DATE-FROM := DATE-TO  ;  DATE-TO := DATE-FROM + 2  ;  perform P800-WRITE-DATE;
DATE-FROM := DATE-TO  ;  DATE-TO := DATE-FROM + 3  ;  perform P800-WRITE-DATE;
DATE-FROM := DATE-TO  ;  DATE-TO := DATE-FROM + 4  ;  perform P800-WRITE-DATE;

虽然我们在这里,但另一个小的打字辅助是连续字符“-”,最初是为在下一行继续文字而设计的,但也可用于提高可读性:

define data
    local 1     DATE-A8 (a8)
end-define

    DATE-A8 := '20211231'

    DATE-A8 := '2021' - '12' - '31'

    DATE-A8 := '2021'
            -  '12'
            -  '31'
END

希望你觉得有用。