Предыдущая версия справа и слева
Предыдущая версия
|
|
bb:redbook:209 [2019/07/23 13:48] caufman [3. Атрибут IN] |
bb:redbook:209 [2019/07/23 16:12] caufman [4. Атрибут OUT] |
| |
Пример ниже показывает как работать с такими параметрами: | Пример ниже показывает как работать с такими параметрами: |
| MODULE TestTest_out; |
| IMPORT Log, Math; |
| |
| PROCEDURE Do(OUT z:INTEGER; r:REAL); |
| VAR |
| BEGIN |
| z:=5; |
| r:=-1; |
| END Do; |
| |
| PROCEDURE Start*; |
| VAR |
| BEGIN |
| Do(0,0) |
| END; |
| |
| BEGIN |
| END TestTest_out. |
Как видно из примера, попытка скомпилировать модуль, с вызовом пройцедуры Do закончилась крахом, так как, в качестве аргументов передаются константы, а не переменные. По возврате из процедуры, чему присваивать возвращаемые значения? В примере, представленном ниже, все ошибки устранены и модуль успешно компилируется: | Как видно из примера, попытка скомпилировать модуль, с вызовом пройцедуры Do закончилась крахом, так как, в качестве аргументов передаются константы, а не переменные. По возврате из процедуры, чему присваивать возвращаемые значения? В примере, представленном ниже, все ошибки устранены и модуль успешно компилируется: |
| MODULE TestTest_out; |
| IMPORT StdLog, Math; |
| |
| PROCEDURE Do (OUT z: INTEGER; r: REAL); |
| VAR |
| BEGIN |
| z := 5; |
| r := - 1; |
| END Do; |
| |
| PROCEDURE Start*; |
| VAR |
| z1: INTEGER; |
| r1: REAL; |
| BEGIN |
| Do(z1, r1); |
| StdLog.Int(z1); StdLog.Ln; |
| StdLog.Real(r1); StdLog.Ln; |
| END Start; |
| |
| BEGIN |
| END TestTest_out. |
| |
| (!)TestTest_out.Start |
Оператор RETURN мог бы возвращать несколько значений, во многих языках программирования такой функционал реализован. Но лучше оператор RETURN рассматривать как оператор управления потоком, с возможностью возврата кода выполнения операции, а не штатную возможность возвращать результат операций. Также стоит отметить, что возврат результата требует больше накладных расходов, чем непосредственное изменение переменной. | Оператор RETURN мог бы возвращать несколько значений, во многих языках программирования такой функционал реализован. Но лучше оператор RETURN рассматривать как оператор управления потоком, с возможностью возврата кода выполнения операции, а не штатную возможность возвращать результат операций. Также стоит отметить, что возврат результата требует больше накладных расходов, чем непосредственное изменение переменной. |
| |