#14.3 Подпрограммы-обертки. Изменение сигнатуры функции/Процедуры
Primary tabs
Понятие обертки
Подпрограмма-обертка:
- В широком смысла: подпрограмма, которая использует другую подпрограмму
- В более узком смысле: подпрограмма, которая использует другую подпрограмму, и при этом решает похожу/близкую по смыслу или вообще ту же самую задачу.
Без смены сигнатуры
Есть функция, которая умеет считать сумму или разность двух чисел (в зависимости от переданного знака)
function sum_difference(int_1, int_2: integer; symb: char) :integer; begin if symb = '-' then result := int_1 - int_2 else result := int_1 + int_2; end;
Задача: написать фунцию-обертку над данной, которая сможет поддерживать также и умножение (при этом для уже поддержанных в sum_difference() операций, наша новая функция соответственно должна использовать вызовы sum_difference().
Возможное решение:
function sum_difference_mult(int_1, int_2: integer; symb: char) :integer; begin if symb = '*' then result := int_1 * int_2 else result := sum_difference(int_1, int_2, symb); end;
-- в данном случае функции sum_difference_mult() называют оберткой [над] sum_difference()
Со сменой сигнатуры
Ради упрощения вызова в клиентском коде
Простой пример: предположим, что в нашей программе или ее части нужно только складывать числа, при этом у нас уже есть готовая реализация function sum_difference(), тогда мы можем реализовать вспомогательную функцию-обертку с более простой сигнатурой:
function sum(int_1, int_2: integer;) :integer; begin result := sum_difference(int_1, int_2, '+'); end;
- т.е. теперь мы можем использовать функцию, в которую нужно передавать только два параметра.
Задачи для самостоятельного решения
- Есть функция:
function sum(int_1, int_2: integer;) :integer; begin result := int_1 + int_2; end;
-- реализовать обертку над ней, которая будет уметь не только складывать, но и вычитать числа.
- Log in to post comments
- 1259 reads