|
Функция с количеством параметров > 5, как лучше? | ☑ | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
0
WhiteCat
23.07.13
✎
14:33
|
В неком модуле - сферической в вакууме - есть несколько функций, вызывать которые придется много и часто сторонним разработчикам, которые данный модуль будут использовать в своих конфах. Для облегчения работы с модулем предполагается передача в функцию большого количества параметров, вот живой пример:
Функция ДобавитьОбъектНаПанельЗадач(ДокументHTML, ПанельЗадачСсылка, ДеревоОбъектов, ТаблицаОбъектов, ОбъектПанелиЗадач = Неопределено, ОбъектРодитель = Неопределено, ОбъектИБ = Неопределено, УИД = "", ИдентификаторОбъекта = "", ИдентификаторОписания = "", ДополнительныеПараметры = Неопределено) Экспорт Логика работы модуля подразумевает, что данные функции при его работе будут вызываться достаточно часто. Как в этом случае лучше реализовать передачу параметров в функцию, так как указано выше, каждый параметр отдельно, или через один параметр-структуру? С одной стороны, структуру надо создать перед вызовом функции, с другой - в структуре поля именованные и будет проще присваивать значения ее полям-параметрам, к тому же структуру можно создать один раз и просто менять значения ее полей. Структуру внутри тела функции еще надо разобрать на отдельные параметры, что скажется (скажется ли?) на быстродействии при ее частом вызове. Ммммм? ЗЫ: про рекомендации от 1С я в курсе, мне хочется знать мнение реальных людей, который кодят код. |
||||||||||
1
ДенисЧ
23.07.13
✎
14:34
|
я бы структурой.
Причем фиксированной |
||||||||||
2
Lexusss
23.07.13
✎
14:35
|
При большом количестве необязательных параметров (как в приведенном примере) - гораздо удобнее структурой. Во всех прочих случаях - отдельными параметрами.
|
||||||||||
3
Ёпрст
23.07.13
✎
14:35
|
Соответствием
|
||||||||||
4
Поросенок Петр
23.07.13
✎
14:38
|
Группировать в структуры по смыслу.
Другим мега-способом |
||||||||||
5
Aleksey
23.07.13
✎
14:41
|
И как обычно в этой функции строк кода меньше чем передаваемых параметров. И по любимой традиции 1С все эти параметры в этой функции передаются в другую или как вариант
Функция ДобавитьОбъектНаПанельЗадач(ДокументHTML, ПанельЗадачСсылка, ДеревоОбъектов, ТаблицаОбъектов, ОбъектПанелиЗадач = Неопределено, ОбъектРодитель = Неопределено, ОбъектИБ = Неопределено, УИД = "", ИдентификаторОбъекта = "", ИдентификаторОписания = "", ДополнительныеПараметры = Неопределено) Экспорт Возврат ДобавитьОбъектНаПанельЗадач_наСервере(ДокументHTML, ПанельЗадачСсылка, ДеревоОбъектов, ТаблицаОбъектов, ОбъектПанелиЗадач = Неопределено, ОбъектРодитель = Неопределено, ОбъектИБ = Неопределено, УИД = "", ИдентификаторОбъекта = "", ИдентификаторОписания = "", ДополнительныеПараметры = Неопределено) КонецФункции |
||||||||||
6
Базис
naïve
23.07.13
✎
14:44
|
Если проблема в том, что могут перепутать порядок параметров - поставь всем снегопат, достаточно бесплатного - он показывает параметры при вызове функций.
|
||||||||||
7
Aleksey
23.07.13
✎
14:49
|
(6) Это мелочь, по сравнению с любовью 1С менять параметры своих функций
|
||||||||||
8
orefkov
23.07.13
✎
14:49
|
Вот так и появилось ООП когда-то :)
Некая структура + несколько функций для работы с ней. |
||||||||||
9
1Сергей
23.07.13
✎
14:50
|
(3) ы?
|
||||||||||
10
oslokot
23.07.13
✎
15:02
|
(9) в соответствии обращаться к элементу проще Параметры[...]
|
||||||||||
11
WhiteCat
23.07.13
✎
15:02
|
(5) Не надо грязи, я не 1С!
(6) ФИшка не только в том, что могут перепутать, а в том, что бОльшая часть из низ необязательные. 4 первых - обязательные, причем в пределах одного модуля (того, который пишет разработчик) они не меняются вообще, а из 6-ти последующих обязательны только один или два (указатель на сам объект и его родителя). Со структурой может наступить путанница, если например задать значение параметра "ОбъектИБ" и забыть почистить "ОбъектПанелиЗадач". |
||||||||||
12
oslokot
23.07.13
✎
15:02
|
*Параметры.Получить[имя] т.е.
|
||||||||||
13
WhiteCat
23.07.13
✎
15:05
|
Короч, надо написать промежуточную функцию, которая будет автоматом заполнять 4 первых и сама устанавливать нужный параметр у структуры в зависимости от того, что именно пихает ей на вход кодер, типа такого
СуперДобавитьОбъектНаПанельЗадач(ИмяПараметра, УказательНаОбъект, УказательНаРодителя=Неопределено) где ИмяПараметра принимает значения "ОбъектПанелиЗадач", "ОбъектИБ", "УИД" и т.д. |
||||||||||
14
1Сергей
23.07.13
✎
15:06
|
так писанины меньше и нагляднее:
Отдельными параметрами |
||||||||||
15
mikecool
23.07.13
✎
15:06
|
структура - громоздко обрабатывать, в ней надо каждый параметр на наличие проверять
|
||||||||||
16
Aprobator
23.07.13
✎
15:08
|
(15) может и так, но в типовых это сплошь и рядом.
|
||||||||||
17
IVT_2009
23.07.13
✎
15:08
|
одной структурой
Одной структурой |
||||||||||
18
WhiteCat
23.07.13
✎
15:09
|
(15) Заготовить структуру заранее, кодер пусть только параметры в ней устанавливает.
|
||||||||||
19
WhiteCat
23.07.13
✎
15:09
|
(14) Да блин уже сами начали путаться в такой писанине:
Для Каждого СостояниеЗадачиЭлемент Из КоллекцияДанных_СостояниеЗадачи Цикл // Добавляем состояния задачи на поле КэнВизуализацияСервер.ДобавитьОбъектНаПанельЗадач(ПолеДокументHTML, ПанельЗадачСсылка, ДеревоОбъектов, ТаблицаОбъектов,,,,,"Состояние_" + СостояниеЗадачиЭлемент.Состояние, "Панель"); КонецЦикла; ДополнительныеПараметры = Новый Структура("НеДобавлятьЕслиНеНайденРодитель", Истина); Для Каждого ЗадачаЭлемент Из КоллекцияДанных_Задачи Цикл КэнВизуализацияСервер.ДобавитьОбъектНаПанельЗадач(ПолеДокументHTML, ПанельЗадачСсылка, ДеревоОбъектов, ТаблицаОбъектов,, "Состояние_" + ЗадачаЭлемент.СостояниеЗадачи, ЗадачаЭлемент.Ссылка,, "Задача_" + ЗадачаЭлемент.Код, "Задача", ДополнительныеПараметры); КонецЦикла; |
||||||||||
20
beer_fan
23.07.13
✎
15:10
|
Мне кажется, в таких случаях структура удобнее.
Одной структурой |
||||||||||
21
mikecool
23.07.13
✎
15:12
|
(18) разве что так, плюс сразу устанавливать значения по умолчанию, но это еще одна функция.
и так - на каждую структуру параметров, может вылиться в удвоение количества кода |
||||||||||
22
WhiteCat
23.07.13
✎
15:22
|
(21) Так структуру параметров можно сделать единую для всех вызовов функций. По сути у нас идет управление некими объектами на поле HTML: размещение, перемещение, удаление, изменение размеров или стилей. Структуру параметров заполнили один раз значениями по умолчанию, а далее просто устанавливаем нужного родителя и сам объект и кидаем эту структуру на вход нужной функции - "ДобавитьОбъектНаПанельЗадач", "УдалитьОбъектСПанелиЗадач" и т.д.
|
||||||||||
23
WhiteCat
23.07.13
✎
15:24
|
Просто уже сейчас, даже пока еще сам модуль визуализации не дописан, столкнулись с тем, что каждый раз перед вызовом функции нужно лезть в хелп и смотреть состав и порядок ее параметров. А что будет с кодерами, которые этот модуль не писали?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |