Довідковий матеріал

Параметри процедур і функцій

1. Під час оголошення формальних параметрів процедур і функцій (далі за текстом: функцій) необхідно дотримуватися загальних правил утворення імен змінних. Зокрема, імена параметрів слід утворювати від термінів предметної області таким чином, щоб з імені параметра було зрозуміло його призначення.

1. Під час оголошення формальних параметрів процедур і функцій (далі за текстом: функцій) необхідно дотримуватися загальних правил утворення імен змінних. Зокрема, імена параметрів слід утворювати від термінів предметної області таким чином, щоб з імені параметра було зрозуміло його призначення.

2. Не слід використовувати замість параметрів функцій інші засоби конфігурування (змінні модулів, реквізити форми тощо)

3.1. Параметри у функції мають розташовуватися в логічній послідовності. Рекомендується розташовувати параметри за принципом від загального до конкретного.
Наприклад, неправильно:

Процедура ПерерахуватиСумуДокумента(ІмяПоляСума, ДокументОбєкт, СумаВключаєПДВ = Істина)

Процедура ЗмінитиКолірПоляФорми(Колір, ІмяПоля, Форма)

правильно спочатку розташувати основні параметри ДокументОбєкт і Форма:

Процедура ПерерахуватиСумуДокумента(ДокументОбєкт, ІмяПоляСума, СумаВключаєПДВ = Істина)

Процедура ЗмінитиКолірПоляФорми(Форма, ІмяПоля, Колір)

3.2. Необов’язкові параметри (параметри зі значеннями за замовчуванням) мають розташовуватися після параметрів без значень за замовчуванням.
Наприклад:

Функція КурсВалютиНаДату(Валюта, Дата = Невизначено) Експорт

4. Не рекомендується оголошувати у функціях багато параметрів (потрібно орієнтуватися на кількість не більше семи параметрів), при цьому не має бути багато параметрів зі значеннями за замовчуванням (потрібно орієнтуватися на кількість не більше трьох таких параметрів). В іншому разі читабельність коду виклику значно знижується. Наприклад, можна легко помилитися в кількості ком під час передавання необов’язкових параметрів.

За потреби передавати у функцію велику кількість параметрів рекомендується:

  • групувати однотипні параметри в один або кілька складових параметрів типу Структура. Наприклад, у структури можуть бути об’єднані параметри, що описують склад і значення полів деякого об’єкта (ДаніЗаповнення, ПараметриПроведення, ДаніФайлу тощо);
  • або повністю переглянути логіку роботи функції, наприклад, розділивши її на кілька різних, простіших функцій.

Наприклад, неправильно:

// Додає нове поле на форму, ініціалізує його значеннями за замовчуванням.
Функція ДодатиПолеФорми(Імя,
	Заголовок = Невизначено,
	ОбробникПриЗміні = "",
	ОбробникПочатокВибору = "",
	ШиринаПоля,
	КолірФону = Невизначено,
	КолірФонуЗаголовка = Невизначено,
	Батько = Невизначено,
	КартинкаШапки = Невизначено,
	ШляхДоДаних = Невизначено,
	ЛишеПереглядПоля = Хибність,
	ЗвязкиПараметрівВибору = Невизначено)КінецьФункції
 

// код виклику
НовеПоле = ДодатиПолеФорми("СтараЦіна" + ІмяКолонки, НСтр("uk='Ціна'"),,, 12, КолірФону, КолірЗаголовка, НоваГрупа,,,Істина);
НовеПоле.КолірТексту = WebКольори.Сірий;

Правильно переглянути логіку роботи функцій, залишивши в ній лише один ключовий параметр ІмяПоля:

// Додає нове поле на форму, ініціалізує його значеннями за замовчуванням.
Функція НовеПолеФорми(ІмяПоля)КінецьФункції
// код виклику
НовеПоле = НовеПолеФорми("СтараЦіна" + ІмяКолонки);
НовеПоле.Заголовок = НСтр("uk='Ціна'");
НовеПоле.КолірФону = КолірФону;
НовеПоле.КолірТексту = WebКольори.Сірий;
НовеПоле…. = …
…

Інший приклад. Неправильно:

// Створює елемент довідника "Номенклатура"
Процедура СтворитиЕлементНоменклатури(Найменування, ТоварПослуга, ОдиницяВиміру, ВагаНетто, ПеревірятиУнікальність = Істина)КінецьПроцедури

Правильно згрупувати параметри, що описують значення реквізитів номенклатури, у структуру ЗначенняРеквізитів:

// Створює елемент довідника "Номенклатура"
Процедура СтворитиЕлементНоменклатури(ЗначенняРеквізитів, ПеревірятиУнікальність = Істина)КінецьПроцедури

5. Під час виклику функцій необхідно уникати громіздких конструкцій, які призводять до зниження читабельності коду, збільшують імовірність помилок і ускладнюють налагодження.
Зокрема:

5.1. Не рекомендується під час передавання параметрів в одну функцію застосовувати вкладені виклики інших функцій.
Неправильно:

СтруктураВкладень.Вставити(
ПриєднанийФайл.Найменування,
Новий Картинка(ОтриматиЗТимчасовогоСховища(
ПриєднаніФайли.ОтриматиДаніФайлу(ПриєднанийФайл.Посилання).ПосиланняНаДвійковіДаніФайлу)));

Правильно розбивати такі виклики на окремі оператори за допомогою допоміжних локальних змінних:

АдресаФайлуЗображення = ПриєднаніФайли.ОтриматиДаніФайлу(ПриєднанийФайл.Посилання).ПосиланняНаДвійковіДаніФайлу;
ДаніЗображення = Новий Картинка(ОтриматиЗТимчасовогоСховища(АдресаФайлуЗображення));
СтруктураВкладень.Вставити(ПриєднанийФайл.Найменування, ДаніЗображення);

Водночас, якщо код із вкладеними викликами виходить компактним (не потребує перенесення виразів) і легко читається, вкладені виклики допустимі.
Наприклад:

Попередження(НСтр("uk='Для виконання операції необхідно встановити розширення роботи з файлами.'"));
ПерерахуватиСумуЗаКурсом(Сума, КурсВалютиНаДату(Валюта));

5.2. Також не рекомендується під час виклику функцій використовувати вкладений конструктор структури: Новий Структура(...) . Вкладене оголошення структури допустиме лише в тих випадках, коли кількість її властивостей невелика (потрібно орієнтуватися на кількість властивостей не більше трьох).

Неправильно:

ЗаповнитиЦіни(
Обєкт.Товари, // Таблична частина
, // Масив рядків або структура відбору
Новий Структура( // Параметри заповнення
"Дата, Валюта, Угода, ПоляЗаповнення",
Обєкт.Дата,
Обєкт.Валюта,
Обєкт.Угода,
"Ціна, СтавкаПДВ, ВидЦіни, СтрокПоставки"
),
Новий Структура( // Структура дій зі зміненими рядками
"ПерерахуватиСуму, ПерерахуватиСумуЗПДВ, ПерерахуватиСумуПДВ, ПерерахуватиСумуРучноїЗнижки, ОчиститиАвтоматичнуЗнижку, ОчиститиСумуВзаєморозрахунків",
"КількістьУпаковок", СтруктураПерерахункуСуми, СтруктураПерерахункуСуми, "КількістьУпаковок", Невизначено, Невизначено
)
);

Правильно:

ПараметриЗаповнення = Новий Структура;
ПараметриЗаповнення.Вставити("Дата", Обєкт.Дата);
ПараметриЗаповнення.Вставити("Валюта", Обєкт.Валюта);
ПараметриЗаповнення.Вставити("Угода", Обєкт.Угода);
ПараметриЗаповнення.Вставити("ПоляЗаповнення", "Ціна, СтавкаПДВ, ВидЦіни, СтрокПоставки");

ДіїЗіЗміненимиРядками = Новий Структура;
ДіїЗіЗміненимиРядками.Вставити("ПерерахуватиСуму","КількістьУпаковок");
ДіїЗіЗміненимиРядками.Вставити("ПерерахуватиСумуЗПДВ", ПараметриПерерахункуСуми);
ДіїЗіЗміненимиРядками.Вставити("ПерерахуватиСумуПДВ", ПараметриПерерахункуСуми);
ДіїЗіЗміненимиРядками.Вставити("ПерерахуватиСумуРучноїЗнижки","КількістьУпаковок");
ДіїЗіЗміненимиРядками.Вставити("ОчиститиАвтоматичнуЗнижку");
ДіїЗіЗміненимиРядками.Вставити("ОчиститиСумуВзаєморозрахунків");

Записатися телефоном