Задача от буриданова осла

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3517
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Задача от буриданова осла

Сообщение Игорь Столяров » 07 Сентябрь 2018, 10:59

Привет всем ! :)

Сразу предупреждаю - вопрос чисто теоретический …
Есть некая процедура, в которую для обработки нужно передавать параметры-значения.
Много параметров, штук 20-30 … Процедура вызывается многократно, в цикле …

Видится 2 способа решения задачи.

1. Не заморачиваться.
Просто объявить процедуру с этими параметрами и при вызове их туда передать.

2. Объявить тип данных GROUP,TYPE со списком этих параметров.
Перед вызовом процедуры присвоить элементам группы значения параметров,
а саму процедуру при вызове передать адрес CONST GROUP.

И собственно вопрос от сабжа: какой из вариантов эффективней и лучше ?

В первом - всё многообразие параметров записывается в стек,
во втором куча операций присваивания перед вызовом процедуры ...

Не могу выбрать. :(
«V» значит Вендетта !

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2039
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Задача от буриданова осла

Сообщение Дед Пахом » 07 Сентябрь 2018, 11:20

Для меня удобнее иметь процедуру с одним параметром, чем с 30-ю (а где 30, там скоро будет 50).
С уважением, ДП

kreator
Ветеран
Сообщения: 2866
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Задача от буриданова осла

Сообщение kreator » 07 Сентябрь 2018, 11:48

Я тоже за второй вариант. Можно и очередь приспособить. Для универсальности. Я так делаю отчёты. Передаю в процедуру отчёта очередь. А очередь у меня универсальная, пока на 200 полей. Да её нужно сформировать перед вызовом процедуры. Чем-то надо жертвовать.
We are hard at work… for you. :)

Yufil
Ветеран движения
Сообщения: 1008
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

Задача от буриданова осла

Сообщение Yufil » 07 Сентябрь 2018, 11:56

1. Не знаю, как сейчас - в CW6 натыкался на ограничение количества параметров, поле параметров в APP было ограничено, где-то 20 параметров-и не больше...
2. Когда параметров ну очень много, часть из них оказывается не сильно нужной. Например, из 30 параметров пять содержательные, остальные должны иметь значения по умолчанию.

3. Когда параметров ну очень много, пропустить или перепутать порядок - раз плюнуть, так что Group (или даже класс) оно лучшее.

4. Когда меня замучили горестные размышления на эту тему, реализовал передачу параметров в строке с ключами
Call MyProcedure('X1=15,X2=30,Y1=500,Name=`Имя` ..... ) с парсингом списка параметров в очередь и анализом оной.
Кстати, так удобно передавать несколько параметров при вызове через Start. Естественно, в этом случае добавить новый параметр - без проблем...

5. Да, ещё у меня есть аддоны-плагины и всё такое, у них должен быть единый интерфейс, а дополнительные параметры могут быть и разными.

Аватара пользователя
vic7tar
Активист
Сообщения: 103
Зарегистрирован: 09 Февраль 2017, 20:12

Задача от буриданова осла

Сообщение vic7tar » 07 Сентябрь 2018, 12:06

Игорь Столяров писал(а):
07 Сентябрь 2018, 10:59
Есть некая процедура, в которую для обработки нужно передавать параметры-значения.
Много параметров, штук 20-30 … Процедура вызывается многократно, в цикле …
А этом цикле меняются кол-во параметров и их типы?
C10, Win10x64

PavelNK
Активист
Сообщения: 197
Зарегистрирован: 15 Март 2011, 8:02

Задача от буриданова осла

Сообщение PavelNK » 07 Сентябрь 2018, 12:10

Я тоже столкнулся с такой же проблемой.
Вроде бы есть, но сходу не нашел, ограничение по кол-ву параметров.
Раньше точно было.
Я думаю, что вообще удобней и правильней оперировать классами, т.е. передавать не группу и не очередь, а класс.
Если для обработки понадобились дополнительные данные об объекте, то они там есть, не нужно ничего объявлять, менять.
Нужно только изменить обработку в самой процедуре.
Как правило, так делается во всех языках, во всех современных библиотеках.

Аватара пользователя
Губин Игорь
Ветеран
Сообщения: 1086
Зарегистрирован: 16 Сентябрь 2005, 15:35
Откуда: Москва

Задача от буриданова осла

Сообщение Губин Игорь » 07 Сентябрь 2018, 12:53

группа

У передачи параметров в явном виде есть, при таком их количестве, имхо, только одно ЯВНОЕ преимущество - не забудешь везде прописать. Остальное только недостатки
Это я только кажусь дураком! На самом деле я полный идиот!

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3517
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Задача от буриданова осла

Сообщение Игорь Столяров » 07 Сентябрь 2018, 13:48

Спасибо ! Здесь вопрос конечно о ручном коде был …
Коллективный интернет-разум выбрал GROUP. Значит будет GROUP. :)

Заморочки среды разработки с параметрами - это отдельная весёлая тема.
Кому скучно - можно попробовать указать в поле Protoptype: (,,,)
;)
«V» значит Вендетта !

Аватара пользователя
Губин Игорь
Ветеран
Сообщения: 1086
Зарегистрирован: 16 Сентябрь 2005, 15:35
Откуда: Москва

Задача от буриданова осла

Сообщение Губин Игорь » 07 Сентябрь 2018, 13:54

Игорь Столяров писал(а):
07 Сентябрь 2018, 13:48
Кому скучно - можно попробовать указать в поле Protoptype: (,,,)
RTFM

Изображение

Ничего личного :cat:
Это я только кажусь дураком! На самом деле я полный идиот!

Аватара пользователя
vic7tar
Активист
Сообщения: 103
Зарегистрирован: 09 Февраль 2017, 20:12

Задача от буриданова осла

Сообщение vic7tar » 07 Сентябрь 2018, 14:04

Игорь Столяров писал(а):
07 Сентябрь 2018, 13:48
Кому скучно - можно попробовать указать в поле Protoptype: (,,,)
И что должно появиться? :shock:
C10, Win10x64

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3517
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Задача от буриданова осла

Сообщение Игорь Столяров » 07 Сентябрь 2018, 14:18

vic7tar писал(а):
07 Сентябрь 2018, 14:04
И что должно появиться?
Robert Zaunere - топлес. :idied:
«V» значит Вендетта !

Аватара пользователя
Губин Игорь
Ветеран
Сообщения: 1086
Зарегистрирован: 16 Сентябрь 2005, 15:35
Откуда: Москва

Задача от буриданова осла

Сообщение Губин Игорь » 07 Сентябрь 2018, 14:21

Игорь Столяров писал(а):
07 Сентябрь 2018, 14:18
Robert Zaunere - топлес
Слишком либерально, на мой консервативный вкус :idied:
Это я только кажусь дураком! На самом деле я полный идиот!

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2039
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Задача от буриданова осла

Сообщение Дед Пахом » 07 Сентябрь 2018, 14:33

Вообще говоря, можно разбить входные параметры на логически связанные объекты и передавать в процедуру несколько групп. Например, Фамилия+Имя+Отчество+Д.Р. = PersonGroup, ИНН+Номер паспорта = DocGroup и т.д.
С уважением, ДП

Yufil
Ветеран движения
Сообщения: 1008
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

Задача от буриданова осла

Сообщение Yufil » 07 Сентябрь 2018, 14:39

Дык, тогда просто создать глобальную группу или очередь и забить нужными параметрами, благо Словарь позволяет. И никаких параметров не передавать. Вообще....

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3517
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Задача от буриданова осла

Сообщение Игорь Столяров » 07 Сентябрь 2018, 14:39

Дед Пахом писал(а):
07 Сентябрь 2018, 14:33
можно разбить входные параметры на логически связанные объекты
Это вот очень правильное замечание ! :) Но при одном условии: сначала думать, а потом делать.
А когда просят для ископаемой программы добавить в функцию расчёта воронки продаж ещё 15 показателей … ;)
«V» значит Вендетта !

Ответить