Объедините заявления в строке

Я хотел бы объединить несколько инструкций в одну строку в моей программе NATURAL. Именно так:

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

Я знаю, что это довольно легко сделать на большинстве языков, но я не уверен, что это возможно в Natural.

2 ответа

Решение

В языке нет никаких ограничений, которые мешают помещать операторы в одну строку. Например, вот целая программа в одной строке.

ОПРЕДЕЛИТЬ ЛОКАЛЬНЫЕ ДАННЫЕ 1 #A (A10) КОНЕЦ - ОПРЕДЕЛИТЬ ПЕРЕМЕЩЕНИЕ "XX" НА #A ЗАПИСАТЬ #A КОНЕЦ

Тем не менее, это действительно не интересно читать и относится ко всем языкам. Имейте это в виду для следующего человека, который должен поддерживать код.

Дуглас Бадер, британский летчик-ас и другие цитируют высказывание: « Правила
служат руководством для мудрецов и повиновением дураков» . есть ряд полезных правил, одно из которых: «Каждое утверждение с новой строки» … и разумно следовать этой поговорке, но есть исключения. Иногда вы действительно можете улучшить читабельность кода, нарушив правило. Вот пример (написанный на естественном языке):









      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

Надеюсь, вы нашли это полезным.

Другие вопросы по тегам