Знакомство с процедурами и функциями
5 мин
Функция
Предположим, что нужно посчитать зарплату сотрудникам. В компании оплата за каждый отработанный час. Процент премии устанавливается индивидуально. Все данные приведены в таблице.
Сотрудник | Часов отработано | Ставка | Премия |
---|---|---|---|
Иванов | 100 | 100 | 10 |
Петров | 120 | 150 | 12 |
Методика расчета следующая:
- Оплата за отработанные часы считается умножением отработанных часов на часовую ставку.
- Премия считается как процент от оплаты за отработанные часы.
- Премия и оплата за отработанные часы будет суммой зарплаты.
Опишем расчет на встроенном языке:
ПовременнаяОплата = КоличествоОтработанныхЧасов * ЧасоваяСтавка;
Премия = ПовременнаяОплата * ПроцентПремии / 100;
Результат = ПовременнаяОплата + Премия;
Рассчитаем зарплату для Иванова и Петрова:
Отработано = 100;
ПроцентПремии = 10;
Ставка = 100;
ПовременнаяОплата = Отработано * Ставка;
Премия = ПовременнаяОплата * ПроцентПремии / 100;
ЗарплатаИванов = ПовременнаяОплата + Премия;
Сообщить(ЗарплатаИванов);
Отработано = 120;
ПроцентПремии = 12;
Ставка = 150;
ПовременнаяОплата = Отработано * Ставка;
Премия = ПовременнаяОплата * ПроцентПремии / 100;
ЗарплатаПетров = ПовременнаяОплата + Премия;
Сообщить(ЗарплатаПетров);
Если внимательно посмотреть на полученный код, видно, что для Иванова и Петрова меняются только переменные: КоличествоОтработанныхЧасов, ПроцентПремии, ЧасоваяСтавка.
Код с расчетом можно вынести в отдельную «формулу», куда подставляются значения переменных и получается результат.
Из описания «формулой» является функция, подставляемые значения переменных — параметры функции, получаемый результат — возвращаемое значение.
Опишем, как конструируется функция из примера.
1. Выделим фрагмент общего кода.
...
ПовременнаяОплата = Отработано * Ставка;
Премия = ПовременнаяОплата * ПроцентПремии / 100;
Зарплата = ПовременнаяОплата + Премия;
...
2. Функция всегда должна возвращать какое-то значение, после чего заканчивает свое выполнение. Возвращаемое значение описывается после слова «Возврат». В примере возвращать нужно значение «Зарплата».
...
ПовременнаяОплата = Отработано * Ставка;
Премия = ПовременнаяОплата * ПроцентПремии / 100;
Зарплата = ПовременнаяОплата + Премия;
Возврат Зарплата;
...
3. Нужно выделить начало и конец функции. Для этого используются ключевые слова «Функция», «КонецФункции», после которых не ставится «;».
Функция ...
...
ПовременнаяОплата = Отработано * Ставка;
Премия = ПовременнаяОплата * ПроцентПремии / 100;
Зарплата = ПовременнаяОплата + Премия;
Возврат Зарплата;
КонецФункции
4. Функция должна содержать имя - функция <Имя>. Имя образуется по тем же правилам, что и переменная.
Чтобы понимать, какие значения и в каком порядке будут подставляться, опишем параметры: функция <Имя> (<Параметр1>, <Параметр2>...).
Функция РазмерПовременноПремиальнойЗарплаты(Отработано, Ставка, ПроцентПремии)
ПовременнаяОплата = Отработано * Ставка;
Премия = ПовременнаяОплата * ПроцентПремии / 100;
Зарплата = ПовременнаяОплата + Премия;
Возврат Зарплата;
КонецФункции;
Функция может не содержать параметров.
Функция ПроцентПремии()
Возврат 10;
КонецФункции
5. Чтобы использовать функцию (вызвать), обратимся по ее имени и опишем значения параметров.
Отработано = 100;
Ставка = 100;
ПроцентПремии = 10;
ЗарплатаИванов = РазмерПовременноПремиальнойЗарплаты(Отработано, Ставка, ПроцентПремии);
Вместо переменных допустимо указывать конкретные значения.
Внутри функции будут выполнены вычисления зарплаты, результат получен и присвоен переменной ЗарплатаИванов. Т. е. функция вернет значение зарплаты.
...
ЗарплатаИванов = РазмерПовременноПремиальнойЗарплаты(100, 100, 10);
ЗарплатаПетров = РазмерПовременноПремиальнойЗарплаты(120, 150, 12);
Сообщить(ЗарплатаИванов);
Сообщить(ЗарплатаПетров);
...
Функция РазмерПовременноПремиальнойЗарплаты(Отработано, Ставка, ПроцентПремии)
ПовременнаяОплата = Отработано * Ставка;
Премия = ПовременнаяОплата * ПроцентПремии / 100;
Зарплата = ПовременнаяОплата + Премия;
Возврат Зарплата;
КонецФункции
Процедура
Процедуры похожи на функции. Принципиальное отличие в том, что они не возвращают значения, выполняют последовательность операций.
Процедура СообщитьПроцентыПремий()
Сообщить("Иванов 10%
|Петров 12%
|Сидоров 12%
|Александров 15%
|Сергеев 17%");
КонецФункции
Вместо слов «Функция», «Конец функции» использовалось «Процедура», «КонецПроцедуры», а «Возврат» отсутствует.
Имеется функция РазмерПовременноПремиальнойЗарплаты(). Предположим, нужно написать процедуру, которая выводит сообщения о размерах зарплат, используя эту функцию. В простейшем случае она может выглядеть так.
Процедура СообщитьЗарплаты()
ЗарплатаИванов = РазмерПовременноПремиальнойЗарплаты(100, 100, 10);
ЗарплатаПетров = РазмерПовременноПремиальнойЗарплаты(120, 150, 12);
ЗарплатаСидоров = РазмерПовременноПремиальнойЗарплаты(120, 150, 12);
Сообщить(ЗарплатаИванов);
Сообщить(ЗарплатаПетров);
Сообщить(ЗарплатаСидоров);
КонецПроцедуры
Функция РазмерПовременноПремиальнойЗарплаты(Отработано, Ставка, ПроцентПремии)
ПовременнаяОплата = Отработано * Ставка;
Премия = ПовременнаяОплата * ПроцентПремии / 100;
Зарплата = ПовременнаяОплата + Премия;
Возврат Зарплата;
КонецФункции
Чтобы сообщить зарплаты, достаточно вызвать процедуру
СообщитьЗарплаты();
Общее
Процедуры и функции могут менять значения параметров.
Процедура УвеличитьЧислоНаЕдиницу(Число)
Число = Число + 1;
КонецПроцедуры
Функция ЧислоУвеличиноНаЕдиницу(Число)
Число = Число + 1;
Возврат Истина;
КонецФункции
В платформе уже имеется большое количество процедур и функций. Среди них:
- Процедуры и функции работы с файлами, двоичными данными и т. д.
- Функции работы со строками, датами и т. д.
Они описаны в «Синтакс-помощнике».
Например, функция Макс(<Значение1>, <Значение2>, ..., <ЗначениеN>)
Возвращает максимальное из полученных значений.
МаксимальноеЧисло = Макс(1, 2, 3, 10);
Сообщить(МаксимальноеЧисло); // 10