Перейти к содержанию
#std640

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

1.

Параметры методов надо именовать так же, как переменные.

См. #std454: Правила образования имен переменных

2.

Используйте параметры методов. Избегайте неявную передачу, такую как переменные модулей или реквизиты формы.

3.

Используйте порядок параметров: от общего к частному.

Неправильно

Процедура ПересчитатьСуммуДокумента(ИмяПоляСумма, ДокументОбъект, СуммаВключаетНДС = Истина)

Процедура ПоменятьЦветПоляФормы(Цвет, ИмяПоля, Форма)

Правильно

ДокументОбъект и Форма разместить впереди:

Процедура ПересчитатьСуммуДокумента(ДокументОбъект, ИмяПоляСумма, СуммаВключаетНДС = Истина)

Процедура ПоменятьЦветПоляФормы(Форма, ИмяПоля, Цвет)
4.

Необязательные параметры (параметров по-умолчанию) располагайте после обязательных.

Правильно

Функция КурсВалютыНаДату(Валюта, Дата = Неопределено) Экспорт
5.

Не делайте больше 7 параметров. Не делайте больше 3 необязательных параметров (параметров по-умолчанию).

Вместо большого количества параметров:

  • группируйте похожие параметры в один типа Структура, такие как ДанныеЗаполнения, ПараметрыПроведения, ДанныеФайла
  • пересмотрите логику работы метода, разбейте логику на несколько методов

Неправильно

// Добавляет новое поле на форму, инициализирует его значениями по умолчанию.
Функция ДобавитьПолеФормы(ИмяПоля, Заголовок = Неопределено, ОбработчикПриИзменении = "", ОбработчикНачалоВыбора = "",
    ШиринаПоля, ЦветФона = Неопределено, ЦветФонаЗаголовка = Неопределено, Родитель = Неопределено,
    КартинкаШапки = Неопределено, ПутьКДанным = Неопределено, ТолькоПросмотрПоля = Ложь,
    СвязиПараметровВыбора = Неопределено)
    
КонецФункции

// вызывающий код
НовоеПоле = ДобавитьПолеФормы("СтараяЦена", НСтр("ru='Цена'"),,, 12, ЦветФона, ЦветЗаголовка, НоваяГруппа,,,Истина);
НовоеПоле.ЦветТекста = WebЦвета.Серый;
// Создает элемент справочника "Номенклатура"
Процедура СоздатьЭлементНоменклатуры(Наименование, ТоварУслуга, ЕдиницаИзмерения, ВесНетто, ПроверятьУникальность = Истина)
    
КонецПроцедуры

Правильно

ИмяПоля оставить как ключевой параметр, логику пересмотреть:

// Добавляет новое поле на форму, инициализирует его значениями по умолчанию.
Функция НовоеПолеФормы(ИмяПоля)  
    
КонецФункции

// вызывающий код
НовоеПоле = НовоеПолеФормы("СтараяЦена");
НовоеПоле.Заголовок  = НСтр("ru='Цена'");
НовоеПоле.ЦветФона   = ЦветФона;
НовоеПоле.ЦветТекста = WebЦвета.Серый;
НовоеПоле. = 
6.

Избегайте громоздких конструкций.

6.1.

Избегайте вложенные вызовы. Передавайте параметры явно.

Неправильно

СтруктураВложений.Вставить(ПрисоединенныйФайл.Наименование,
    Новый Картинка(ПолучитьИзВременногоХранилища(
        ПрисоединенныеФайлы.ПолучитьДанныеФайла(ПрисоединенныйФайл.Ссылка).СсылкаНаДвоичныеДанныеФайла)));

Правильно

Разбивайте параметры с помощью логических переменных:

АдресФайлаИзображения = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ПрисоединенныйФайл.Ссылка).СсылкаНаДвоичныеДанныеФайла;
ДанныеИзображения = Новый Картинка(ПолучитьИзВременногоХранилища(АдресФайлаИзображения));
СтруктураВложений.Вставить(ПрисоединенныйФайл.Наименование, ДанныеИзображения);

Чувствуете легкость и компактность? Оставьте как есть!

Предупреждение(НСтр("ru='Для выполнения операции необходимо установить расширение работы с файлами.'"));

ПеречитатьСуммуПоКурсу(Сумма, КурсВалютыНаДату(Валюта));

6.2.

Избегайте вложенные конструкторы. Вложенные структуры создавайте только если свойств структуры 3 и меньше.

Неправильно

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

Правильно

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

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

ЗаполнитьЦены(Объект.Товары, ПараметрыЗаполнения, ДействияСИзмененнымиСтроками);
6.3.

Избегайте лишних пробелов:

  • перед открывающей скобкой
  • после открывающей скобки
  • перед закрывающей скобкой
  • перед запятыми

Неправильно

НовоеПоле = НовоеПолеФормы ( ИмяПоля , ТипПоля );

Правильно

НовоеПоле = НовоеПолеФормы(ИмяПоля, ТипПоля);

В стандарте не указано

Полную формулировку "перед запятыми при размещении параметров в одной строке и если параметры не опущены" можно трактовать как разрешения писать слитно запятые у необязательных параметров

Форма = ПолучитьФорму(ИмяФормы, , , , , , Параметр);
Форма = ПолучитьФорму(ИмяФормы,,,,,, Параметр);

равносильно допустимы

7.

При вызове методов не пропускайте обязательные параметры. Пропущенный обязательный параметр получит значение Неопределено, а метод может не уметь с ним работать.

Для вызова методы:

Процедура ПоменятьЦветПоляФормы(Форма, ИмяПоля, Цвет)

Неправильно

ПоменятьЦветПоляФормы(,"РезультатПроверки", ЦветаСтиля.ПоясняющийОшибкуТекст); // пропущен первый параметр Форма
ПоменятьЦветПоляФормы(,,); // пропущены все обязательные параметры 

Правильно

ПоменятьЦветПоляФормы(ЭтотОбъект, "РезультатПроверки", Цвет); // указаны все обязательные параметры
См. также
Источник

https://its.1c.ru/db/v8std#content:640