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

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


bb:redbook:107

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
Следующая версия Следующая версия справа и слева
bb:redbook:107 [2017/08/30 14:19]
prospero78 [2. Оформление процедуры]
bb:redbook:107 [2017/08/30 14:29]
prospero78 [5. Вызов процедуры с параметрами]
Строка 25: Строка 25:
 Как было описано в одном из предыдущих разделов, после последней инструкции в теле процедуры — перед ''END'' — точку с запятой ставить не нужно. Как было описано в одном из предыдущих разделов, после последней инструкции в теле процедуры — перед ''END'' — точку с запятой ставить не нужно.
 ==== 3. Процедура без параметров ==== ==== 3. Процедура без параметров ====
-Параметром называется какая-либо переменная, которая передаётся в процедуру. Процедура, которая определена без параметров (например, ''Start'') называется "процедурой без параметров".+Параметром называется какая-либо переменная, которая передаётся в процедуру. Процедура, которая определена без параметров (например, ''Старт'') называется "процедурой без параметров".
  
 Такие процедуры встречаются не часто. И использование таких процедур хоть и возможно в **КП**, но не приветствуется. Как правило такие процедуры используют переменные, объявленные //в других местах//. Изменение этих переменных таким способом //нарушает// принцип //разделения и сокрытия информации//, что приводит к //снижению// надёжности программ.  Такие процедуры встречаются не часто. И использование таких процедур хоть и возможно в **КП**, но не приветствуется. Как правило такие процедуры используют переменные, объявленные //в других местах//. Изменение этих переменных таким способом //нарушает// принцип //разделения и сокрытия информации//, что приводит к //снижению// надёжности программ.
Строка 38: Строка 38:
  
 <code oberon2> <code oberon2>
-MODULE TestHello03;+MODULE КнигаПривет3;
  (* это третья программа на языке  (* это третья программа на языке
  Компонентный Паскаль. Она выполняет  Компонентный Паскаль. Она выполняет
Строка 44: Строка 44:
  показывает как использовать процедуры *)  показывает как использовать процедуры *)
  
- IMPORT Log;+ IMPORT мЛог := Log; 
  CONST  CONST
- = 2;+ _конст = 2; 
  VAR  VAR
- i: INTEGER; + цПерем: INTEGER; 
- i1: REAL;+ вПерем: REAL;
  
- PROCEDURE LogReal (r: REAL);+ PROCEDURE Вещ_Печать (пвПерем: REAL);
  VAR  VAR
  BEGIN  BEGIN
- Log.Real(r); + мЛог.Real(пвПерем); 
- Log.Ln + мЛог.Ln 
- END LogReal;+ END Вещ_Печать;
  
- PROCEDURE Start*;+ PROCEDURE Старт*;
  VAR  VAR
  BEGIN  BEGIN
- := 3; + цПерем := 3; 
- i1 := i+ вПерем := _конст цПерем
- Log.String('Привет, мир!'); Log.Ln; + мЛог.String('Привет, мир!'); мЛог.Ln; 
- LogReal(i1+ Вещ_Печать(вПерем
- END Start;+ END Старт;
  
 BEGIN BEGIN
-END TestHello03.+END КнигаПривет3.
 </code>  </code> 
   
-Этот вариант программы делает всё тоже самое, что и предыдущая, но с использованием дополнительной процедуры ''LogReal'' описанной выше. Передаваемый аргумент ''i1'' должен иметь тот же тип, что и требуемый параметр в объявлении процедуры. В противном случае, **КП** посчитает это ошибкой. Теперь вместо двух инструкций ''Log.Real(i1); Log.Ln'' можно писать только одну, что приводит к сокращению набираемого кода. В этом примере заключается одна из ключевых идей процедурного стиля. Но обратите внимание, что для вызова процедуры компьютеру требуется выполнить ряд дополнительный служебных действий, и при возврате из процедуры также выполняются некоторые действия, что приводит к дополнительным небольшим затратам времени. Поэтому, //вызов процедуры должен быть оправдан//. Само тело процедуры не должно состоять из одной инструкции, так как в этом //нет никакого смысла//.+Этот вариант программы делает всё тоже самое, что и предыдущая, но с использованием дополнительной процедуры ''Вещ_ Печать'' описанной выше. Передаваемый аргумент ''вПерем'' должен иметь тот же тип, что и требуемый параметр в объявлении процедуры. В противном случае, **КП** посчитает это ошибкой. Теперь вместо двух инструкций ''мЛог.Real(вПерем); Log.Ln'' можно писать только одну, что приводит к сокращению набираемого кода. В этом примере заключается одна из ключевых идей процедурного стиля. Но обратите внимание, что для вызова процедуры компьютеру требуется выполнить ряд дополнительный служебных действий, и при возврате из процедуры также выполняются некоторые действия, что приводит к дополнительным небольшим затратам времени. Поэтому, //вызов процедуры должен быть оправдан//. Само тело процедуры не должно состоять из одной инструкции, так как в этом //нет никакого смысла//.
  
-Ещё один момент на который необходимо обратить внимание — это порядок размещения процедур. Если процедуру ''LogReal'' разместить позже процедуры ''Start'' компилятор **КП** не сможет понять, что за процедуру вызывает инструкция ''LogReal(i1)''. Компиляция завершится ошибкой. Поэтому, объявление процедур должно быть упреждающим.+Ещё один момент на который необходимо обратить внимание — это порядок размещения процедур. Если процедуру ''Вещ Печать'' разместить позже процедуры ''Старт'' компилятор **КП** не сможет понять, что за процедуру вызывает инструкция ''Вещ Печать(вПерем)''. Компиляция завершится ошибкой. Поэтому, объявление процедур должно быть упреждающим.
   
 ==== 6. Возврат значения из процедуры ==== ==== 6. Возврат значения из процедуры ====