Инструменты пользователя

Инструменты сайта


bb:redbook:209

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
bb:redbook:209 [2018/11/30 01:13]
127.0.0.1 внешнее изменение
bb:redbook:209 [2019/07/23 16:12]
caufman [4. Атрибут OUT]
Строка 16: Строка 16:
  
 Пример использования:  Пример использования:
-  +  MODULE TestTest_in; 
- +  IMPORT  Log, Math; 
 +   
 +  PROCEDURE Do(IN a:INTEGER); 
 +  VAR 
 +  BEGIN 
 +      Log.Int(a);Log.Ln; 
 +      a:=3; 
 +      Log.Int(a);Log.Ln; 
 +  END Do; 
 +   
 +  BEGIN 
 +  END TestTest_in.
 Как видно из примера, при попытке его скомпилировать, посыпятся сообщения об ошибках. И всё именно потому, что параметр с атрибутом IN доступен только для чтения. К тому же, параметр "а" определён как INTEGER, а допустимые типы — записи или массивы.  [↑] Как видно из примера, при попытке его скомпилировать, посыпятся сообщения об ошибках. И всё именно потому, что параметр с атрибутом IN доступен только для чтения. К тому же, параметр "а" определён как INTEGER, а допустимые типы — записи или массивы.  [↑]
   
Строка 25: Строка 36:
  
 Пример ниже показывает как работать с такими параметрами: Пример ниже показывает как работать с такими параметрами:
-  +  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 рассматривать как оператор управления потоком, с возможностью возврата кода выполнения операции, а не штатную возможность возвращать результат операций. Также стоит отметить, что возврат результата требует больше накладных расходов, чем непосредственное изменение переменной.
  
bb/redbook/209.txt · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)