#std640¶
Параметры процедур и функций¶
1.¶
Параметры методов надо именовать так же, как переменные.
См. #std454: Правила образования имен переменных
2.¶
Используйте параметры методов. Избегайте неявную передачу, такую как переменные модулей или реквизиты формы.
3.¶
Используйте порядок параметров: от общего к частному.
Неправильно
Правильно
ДокументОбъект и Форма разместить впереди:
4.¶
Необязательные параметры (параметров по-умолчанию) располагайте после обязательных.
5.¶
Не делайте больше 7 параметров. Не делайте больше 3 необязательных параметров (параметров по-умолчанию).
Вместо большого количества параметров:
- группируйте похожие параметры в один типа
Структура, такие какДанныеЗаполнения,ПараметрыПроведения,ДанныеФайла - пересмотрите логику работы метода, разбейте логику на несколько методов
Неправильно
// Добавляет новое поле на форму, инициализирует его значениями по умолчанию.
Функция ДобавитьПолеФормы(ИмяПоля, Заголовок = Неопределено, ОбработчикПриИзменении = "", ОбработчикНачалоВыбора = "",
ШиринаПоля, ЦветФона = Неопределено, ЦветФонаЗаголовка = Неопределено, Родитель = Неопределено,
КартинкаШапки = Неопределено, ПутьКДанным = Неопределено, ТолькоПросмотрПоля = Ложь,
СвязиПараметровВыбора = Неопределено)
…
КонецФункции
// вызывающий код
НовоеПоле = ДобавитьПолеФормы("СтараяЦена", НСтр("ru='Цена'"),,, 12, ЦветФона, ЦветЗаголовка, НоваяГруппа,,,Истина);
НовоеПоле.ЦветТекста = WebЦвета.Серый;
Правильно
ИмяПоля оставить как ключевой параметр, логику пересмотреть:
// Добавляет новое поле на форму, инициализирует его значениями по умолчанию.
Функция НовоеПолеФормы(ИмяПоля)
…
КонецФункции
// вызывающий код
НовоеПоле = НовоеПолеФормы("СтараяЦена");
НовоеПоле.Заголовок = НСтр("ru='Цена'");
НовоеПоле.ЦветФона = ЦветФона;
НовоеПоле.ЦветТекста = WebЦвета.Серый;
НовоеПоле…. = …
6.¶
Избегайте громоздких конструкций.
6.1.¶
Избегайте вложенные вызовы. Передавайте параметры явно.
Неправильно
Правильно
Разбивайте параметры с помощью логических переменных:
АдресФайлаИзображения = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ПрисоединенныйФайл.Ссылка).СсылкаНаДвоичныеДанныеФайла;
ДанныеИзображения = Новый Картинка(ПолучитьИзВременногоХранилища(АдресФайлаИзображения));
СтруктураВложений.Вставить(ПрисоединенныйФайл.Наименование, ДанныеИзображения);
Чувствуете легкость и компактность? Оставьте как есть!
6.2.¶
Избегайте вложенные конструкторы. Вложенные структуры создавайте только если свойств структуры 3 и меньше.
Неправильно
ЗаполнитьЦены(Объект.Товары, ,
Новый Структура("Дата, Валюта, Соглашение, ПоляЗаполнения", Объект.Дата, Объект.Валюта, Объект.Соглашение, "Цена, СтавкаНДС, ВидЦены, СрокПоставки"),
Новый Структура("ПересчитатьСумму, ПересчитатьСуммуСНДС, ПересчитатьСуммуНДС, ПересчитатьСуммуРучнойСкидки, ОчиститьАвтоматическуюСкидку,
ОчиститьСуммуВзаиморасчетов", "КоличествоУпаковок", СтруктураПересчетаСуммы, СтруктураПересчетаСуммы,
"КоличествоУпаковок", Неопределено, Неопределено));
Правильно
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("Дата", Объект.Дата);
ПараметрыЗаполнения.Вставить("Валюта", Объект.Валюта);
ПараметрыЗаполнения.Вставить("Соглашение", Объект.Соглашение);
ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "Цена, СтавкаНДС, ВидЦены, СрокПоставки");
ДействияСИзмененнымиСтроками = Новый Структура;
ДействияСИзмененнымиСтроками.Вставить("ПересчитатьСумму","КоличествоУпаковок");
ДействияСИзмененнымиСтроками.Вставить("ПересчитатьСуммуСНДС", ПараметрыПересчетыСуммы);
ДействияСИзмененнымиСтроками.Вставить("ПересчитатьСуммуНДС", ПараметрыПересчетыСуммы);
ДействияСИзмененнымиСтроками.Вставить("ПересчитатьСуммуРучнойСкидки","КоличествоУпаковок");
ДействияСИзмененнымиСтроками.Вставить("ОчиститьАвтоматическуюСкидку");
ДействияСИзмененнымиСтроками.Вставить("ОчиститьСуммуВзаиморасчетов ");
ЗаполнитьЦены(Объект.Товары, ПараметрыЗаполнения, ДействияСИзмененнымиСтроками);
6.3.¶
Избегайте лишних пробелов:
- перед открывающей скобкой
- после открывающей скобки
- перед закрывающей скобкой
- перед запятыми
В стандарте не указано
Полную формулировку "перед запятыми при размещении параметров в одной строке и если параметры не опущены" можно трактовать как разрешения писать слитно запятые у необязательных параметров
Форма = ПолучитьФорму(ИмяФормы, , , , , , Параметр);
Форма = ПолучитьФорму(ИмяФормы,,,,,, Параметр);
равносильно допустимы
7.¶
При вызове методов не пропускайте обязательные параметры.
Пропущенный обязательный параметр получит значение Неопределено, а метод может не уметь с ним работать.
Для вызова методы:
Неправильно
Правильно
См. также¶
- СОВЕРШЕННЫЙ КОД Стив Макконнелл ГЛАВА 7. Высококачественные методы
- ЧИСТЫЙ КОД Роберт Мартин ГЛАВА 3. Функции
- Чистый дизайн Кент Бек ГЛАВА 8. Пояснительные переменные
- Чистый дизайн Кент Бек ГЛАВА 10. Явная передача параметров
- Передача параметров по ссылке и по значению при вызове процедур и функций
- Руководство разработчика 4.7.4. Передача параметров процедур и функций
- #std641: Структуры и таблицы значений в качестве параметров процедур и функций