Объедините заявления в строке
Я хотел бы объединить несколько инструкций в одну строку в моей программе 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
Надеюсь, вы нашли это полезным.