Как зациклить количество X раз в RPG без создания переменных? - PullRequest
1 голос
/ 30 мая 2019

У меня есть кусок старого кода, который я пытаюсь преобразовать

Очень просто, всего 10 циклов

C                   DO        10
C* code 
C                   ENDDO

Чтобы использовать цикл for в свободном синтаксисе, необходимо создать переменную. Например:

  FOR I = 1 TO 10;
    // code
  ENDFOR;

Есть ли способ сделать это без необходимости создания новой переменной?

1 Ответ

2 голосов
/ 31 мая 2019

Нет, но в RPG IV это не обязательно такая большая проблема. В RPG IV вы можете использовать процедуры, а процедуры могут иметь локальные переменные. RPG 400 и раньше разрешены только глобальные переменные. Однако, если вы используете подпрограммы в своих программах RPG IV, вам все равно придется использовать глобальные переменные.

Вы все еще не используете подпрограммы?

Вот синтаксическая разница:

Подпрограммы в свободном:

exsr mysubroutine;

...

begsr mysubroutine;

   ...

endsr;

как это выглядит с минимальными подпроцедурами;

myProcedure();

...

dcl-proc myProcedure;

   ...

end-proc;

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

Преимущества процедур?

  1. Вы можете объявить локальные переменные для этих циклов.
  2. Вы все еще можете использовать все глобальные переменные, которые используют ваши подпрограммы.
  3. Вы можете передавать параметры.
  4. Вы можете вернуть значение и использовать процедуру в выражении.
  5. Процедуры можно вызывать рекурсивно.

Gotchas

  1. Вы все еще можете использовать все глобальные переменные, которые используют ваши подпрограммы.
  2. Вы не можете вызвать подпрограмму изнутри процедуры, если она не определена в процедуре.
  3. Вы не можете вызвать подпрограмму, определенную внутри процедуры, из-за пределов этой процедуры.

Gotchas # 2 & # 3 означают, что может быть лучше преобразовать все ваши подпрограммы в процедуры. Вы можете сделать это без каких-либо побочных эффектов.

...