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

Clarion, Clarion 7

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

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

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

Сообщение Игорь Столяров »

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

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

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

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

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

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

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

Не могу выбрать. :(
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

Сообщение Дед Пахом »

Для меня удобнее иметь процедуру с одним параметром, чем с 30-ю (а где 30, там скоро будет 50).
С уважением, ДП
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

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

Сообщение kreator »

Я тоже за второй вариант. Можно и очередь приспособить. Для универсальности. Я так делаю отчёты. Передаю в процедуру отчёта очередь. А очередь у меня универсальная, пока на 200 полей. Да её нужно сформировать перед вызовом процедуры. Чем-то надо жертвовать.
We are hard at work… for you. :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

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

Сообщение Yufil »

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

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

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

5. Да, ещё у меня есть аддоны-плагины и всё такое, у них должен быть единый интерфейс, а дополнительные параметры могут быть и разными.
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

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

Сообщение vic7tar »

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

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

Сообщение PavelNK »

Я тоже столкнулся с такой же проблемой.
Вроде бы есть, но сходу не нашел, ограничение по кол-ву параметров.
Раньше точно было.
Я думаю, что вообще удобней и правильней оперировать классами, т.е. передавать не группу и не очередь, а класс.
Если для обработки понадобились дополнительные данные об объекте, то они там есть, не нужно ничего объявлять, менять.
Нужно только изменить обработку в самой процедуре.
Как правило, так делается во всех языках, во всех современных библиотеках.
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

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

Сообщение Губин Игорь »

группа

У передачи параметров в явном виде есть, при таком их количестве, имхо, только одно ЯВНОЕ преимущество - не забудешь везде прописать. Остальное только недостатки
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

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

Заморочки среды разработки с параметрами - это отдельная весёлая тема.
Кому скучно - можно попробовать указать в поле Protoptype: (,,,)
;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

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

Сообщение Губин Игорь »

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

Изображение

Ничего личного :cat:
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

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

Сообщение vic7tar »

Игорь Столяров писал(а): 07 Сентябрь 2018, 13:48Кому скучно - можно попробовать указать в поле Protoptype: (,,,)
И что должно появиться? :shock:
C10, Win10x64
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

vic7tar писал(а): 07 Сентябрь 2018, 14:04И что должно появиться?
Robert Zaunere - топлес. :idied:
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

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

Сообщение Губин Игорь »

Игорь Столяров писал(а): 07 Сентябрь 2018, 14:18Robert Zaunere - топлес
Слишком либерально, на мой консервативный вкус :idied:
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

Сообщение Дед Пахом »

Вообще говоря, можно разбить входные параметры на логически связанные объекты и передавать в процедуру несколько групп. Например, Фамилия+Имя+Отчество+Д.Р. = PersonGroup, ИНН+Номер паспорта = DocGroup и т.д.
С уважением, ДП
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

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

Сообщение Yufil »

Дык, тогда просто создать глобальную группу или очередь и забить нужными параметрами, благо Словарь позволяет. И никаких параметров не передавать. Вообще....
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

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