===== Использование процедурных типов ===== Суть этой возможности в **Компонентном Паскале** состоит в том, что можно создать //переменную//, которой позже можно присвоить //адрес// какой-либо //процедуры//, после чего, можно использовать эту переменную как саму процедуру. При этом, нужно помнить, что **список аргументов** у //переменной процедурного типа// и самой //процедуры// **должны** совпадать. ==== Пример ==== MODULE TestProcedure; IMPORT sl := StdLog; TYPE tP = PROCEDURE (IN str: ARRAY OF CHAR); PROCEDURE Test1 (IN str: ARRAY OF CHAR); BEGIN sl.String('Test1:=' + str); sl.Ln END Test1; PROCEDURE Test2 (IN str: ARRAY OF CHAR); BEGIN sl.String('Test2:=' + str); sl.Ln END Test2; PROCEDURE Start*; VAR pp: tP; str: ARRAY 40 OF CHAR; BEGIN pp := Test1; str := 'Привет, Вася!'; pp(str); pp := Test2; str := 'Привет, Петя!'; pp(str) END Start; END TestProcedure. ==== Важные замечания ==== Если переменной процедурного типа не присвоить значение, она будет иметь значение **NIL**.