воскресенье, 25 сентября 2011 г.

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

В данной статье пойдет речь о процедурах и функциях + параметрах передаваемых в них. Возможно многие из Вас знают все их возможности, я же попробую затронуть некоторые нюансы, которые могут научить использовать возможности более эффективно.

В рамках публикации мы рассмотрим следующие вопросы:

  • Использование ключевого слова Знач
  • Необязательная установка значения параметра по умолчанию
  • Количество параметров

Использование ключевого слова Знач
Синтаксис помощник описывает эту возможность так: "Знач  - Необязательное ключевое слово, которое указывает на то, что следующий за ним параметр передается по значению, т.е. изменение значения формального параметра при выполнении процедуры никак не повлияет на фактический параметр, переданный при вызове процедуры. Если это ключевое слово не указано, то параметр процедуры передается по ссылке, то есть изменение внутри процедуры значения формального параметра приведет к изменению значения соответствующего фактического параметра.
т.е. в отличии от Delphi в 1С передача параметров всегда происходит по ссылке и только лишь указав ключевое слово Знач передача параметра будет осуществятся по значению(в Delphi для передачи параметра по ссылке используется ключевое слово var, без слова параметр передается по значению).
Например код:

//*******************************************
Процедура ИзменитьИКС(Знач ИКС_Измен_проц)
   
ИКС_Измен_проц = 300;
КонецПроцедуры
//ИзменитьИКС
//*******************************************
Процедура Сформировать()
    Перем
ИКС_сформ;
   
ИКС_сформ = 100;
    Сообщить(
ИКС_сформ);
   
ИзменитьИКС(ИКС_сформ);
    Сообщить(
ИКС_сформ);
КонецПроцедуры
//Сформировать
//*******************************************

не изменить значение переменной Икс_сформ, оно останется равным 100. Если в процедуре ИзменитьИКС убрать ключевое слово Знач, то переменная Икс_сформ после выполнения процедуры будет иметь значение равное 300.

Необязательная установка значения параметра по умолчанию
Как нам всем известно, а возможно и не известно, в процедуре могут быть использованы параметры с установленными значениями по умолчанию. Причём располагать их в любом месте списка формальных параметров, к этому я еще вернусь. Если параметр при вызове процедуры опущен, то он принимает либо установленное по умолчанию значение (если оно есть) либо принимает ''пустое'' значение (значение неопределенного типа). Т.е. код:

//*******************************************
Процедура ИзменитьИКС(ИКС_Измен_проц = 100)
   
ИКС_Измен_проц = ИКС_Измен_проц * 2;
    Сообщить(
ИКС_Измен_проц);
КонецПроцедуры
//ИзменитьИКС
//*******************************************
Процедура Сформировать()
    Перем ИКС_сформ;
   
ИКС_сформ = 500;
    Сообщить(
ИКС_сформ);
   
ИзменитьИКС(ИКС_сформ);
    Сообщить(
ИКС_сформ);
КонецПроцедуры
//Сформировать
//*******************************************

сообщит нам 500,1000,1000. В случае замены строки:

    ИзменитьИКС(ИКС_сформ);

на строку

    ИзменитьИКС();

сообщит нам 500, 200, 500.
В общем всё понятно и ясно, те кто не знал - узнали, кто знал - повторили. теперь перейду к полезному коду. 
1. ИМХО все параметры которым задается значение по умолчанию лучше размещать последними в списке. Тогда при вызове процедуры их можно опускать в списке передаваемых фактических параметров и не ставить запятые перед опущенными параметрами. 
2. Допустим у нас в глобальном модуле есть процедура/функция которая складывает 2 числа:

Функция СуммаЧисел(а,б)Экспорт
    Возврат(
а+б);
КонецФункции

Эта функция используется во многих модулях всей конфигурации. Предположим что появилась необходимость расширить функционал процедуры до сложения трёх чисел. Однако замена имеющейся функции функцией сложения трех чисел приведет к тому, что придется переправлять немало текста, который перестанет отрабатывать из-за внесения в функцию еще одного параметра. Вот тут и можно использовать значение параметров по умолчанию. Достаточно изменить объявление функции:

Функция СуммаЧисел(а,б,в 0)Экспорт

и работоспособность системы останется неизменной, но уже с учетом новых требований.

Количество параметров
В этом вопросе могу сказать одно: универсальное правило одно - нет универсальных правил. Поэтому рассматриваю приемлемые на мой взгляд рекомендации:
  • Разумное число разнородных параметров должно быть не более 5.
  • Всё что более 5 делается как структура, список значений.
  • Описание параметров(комментарий функции/процедуры) обязательны независимо от числа параметров/способа их передачи/имен параметров.
  • Имена параметров должны быть интуитивно понятны любому работающему с кодом.



Комментариев нет:

Отправить комментарий