Re: Как можно обойти ограничение в 26 параметров? | |
---|---|
sphinx Автор Сообщений: 31184 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Вот именно. У меня все значения (ключи) вычитываются во время запуска программы в свойства _SCREEN. Поэтому видны в любом месте программы без всяких PUBLIC. ------------------ "Veni, vidi, vici!"(с) |
Re: Как можно обойти ограничение в 26 параметров? | |
---|---|
sphinx Автор Сообщений: 31184 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Хорошо. Ну вычитал я, к примеру, значения из INI-файла. В одной форме нужен некий набор из N, а в другой из M (Фокстрот говорит, что M больше, чем N) значений. Даже если значения СРАЗУ вычитать в коллекцию, это ничего не даст, ибо набор произвольный. Еще обходить НЕЧЕГО, это надо сначала в массив или в коллекцию загнать, в этом и состоит задача. В принципе моей ToCollection хватало, но оказалось далеко не всегда. ------------------ "Veni, vidi, vici!"(с) |
Re: Как можно обойти ограничение в 26 параметров? | |
---|---|
pasha_usue Сообщений: 3650 Откуда: Е-бург Дата регистрации: 06.10.2006 |
Ересь какая. Речь идёт о 100 константах. Сейчас затраты на вычитку и кэширование пары сотен килобайт - нулевые. Исправлено 1 раз(а). Последнее : pasha_usue, 12.12.17 08:24 |
Re: Как можно обойти ограничение в 26 параметров? | |
---|---|
pasha_usue Сообщений: 3650 Откуда: Е-бург Дата регистрации: 06.10.2006 |
Дефайнить константы - да. Здесь вопрос не в дефайне констант. Саня создаёт наборы перечислений из этих констант. В одном случае - один набор перечислений. В другом - второй набор перечислений. Именует их множествами M и N. Просто этот набор перечислений - это уже не набор констант. Это должны быть две отдельные гомогенные коллекции M и N. А где их хранить, и как вычитывать - дело десятое. Но факт, что не в коде. |
Re: Как можно обойти ограничение в 26 параметров? | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
В этом промежуточном действии тоже нет необходимости. Проще сразу направить вывод значений в Collection, где можно оперировать именами ключей. |
Re: Как можно обойти ограничение в 26 параметров? | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
В зависимости от того что это за значения, и ОТКУДА они берутся. Если это константы (неизменная сущность, могут меняться только при сборке новых версий ПО), то их не нужно вообще "передавать" - они будут прописаны в коде (да, вполне возможно через файл с подключаемыми константами компилятора - h-файл), при том там где используются, а не там откуда идёт вызов. Если это "настройки приложения" (не важно меняются они из самого приложения, или только "снаружи" - администратором или самим разработчиком) - ну обычно их считывают в какой-то объект/курсор, чтобы не дёргать при каждом случае хранилище (ini/txt/dbf/xml - абсолютно без разницы) - и да, если там по сути "список" то вполне себе можно при считывании создавать не 100500 отдельных переменных/свойств/полей (ещё и с идиотскими/бессмысленными именами типа param1, param2,... param100500), а один массив или коллекцию. Если это какие-то "рабочие данные" - ну в фоксе как правило такие данные уже находятся в курсоре - если передача идёт в другую датасессию, придётся сериализовать и потом десериализовать этот курсор - через XML или тот же массив, для одной датасессии просто работать с этим же курсором. В общем не вижу решительно никаких случаев когда ТРЕБУЕТСЯ передавать в метод/функцию 100500 параметров - именно "однотипных/неразличимых по своему назначению". Само по себе - нет. Вопрос в том для чего это сделано и какая задача этим решается. Если внешняя коллекция это, к примеру, "настройки приложения" (и там у элементов есть свои ключи/имена), то держать одним из значений ещё одну коллекцию (возможно уже без ключей - просто набор значений) вполне себе нормальное решение. Если среди настроек есть "значения-списки". И где хранится КРИТЕРИЙ что входит в N, а что входит в M? В КОДЕ? Но это будет ненадёжно - в ini файле удалят одно из значений, и привет - прога рухнула, или просто работает некорректно, т.к. пытается обратиться к несуществующему "_SCREEN.VeryOldSetting". В самом настроечном файле (скажем не app.ini, а уже более "конкретном" formClient.ini) - в виде "списка имён настроек/свойств _SCREENа? Ну так тут всё получается достаточно прямолинейно, хотя и "в два движения" - сначала считываем этот "список имён свойств" - и таки в коллекцию/массив (ALINES к примеру побьёт строку "имён через запятую"), затем уже цикл по нему, и используя GETPEM() получаем сами "значения". При том это лучше будет делать внутри соответствующей функции, т.е. на её вход будет подаваться либо "список свойств _SCREEN разделённых запятой", либо имя ini/txt/pnl/не_суть_важно файла с таким списком. Т.е. в любом случае в КОДЕ не будет никаких конструирований
Если эти "наборы" не специфичны для конкретных форм, т.е. на всё приложения есть 2-3 "набора" а используются они в 100 местах, то лучше уже переосмыслить саму систему хранения "настроек", привязав тем или иным способом к каждой настройке информацию о том в какой набор она входит. Это позволит вполне себе "прямо" получать нужные "подмножества N" и "подмножества M". Вот только я отчего то уверен на 90% что всё это "горе от ума" - излишнее усложнение системы. Конструирование на фоксе ещё одного "фокса, но проще" ------------------ WBR, Igor |
Re: Как можно обойти ограничение в 26 параметров? | |
---|---|
sphinx Автор Сообщений: 31184 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Тогда давай другие возможные случаи рассмотрим: - удалили EXE-файл - убили разработчика - грохнули БД - спи... украли компьютер М-да, это серьезнее, нежели удалять значения из INI-файла, существование которых, кстати, нетрудно проверить при старте (правда я не делаю, мне незачем). ------------------ "Veni, vidi, vici!"(с) |
Re: Как можно обойти ограничение в 26 параметров? | |
---|---|
spinz Сообщений: 5263 Дата регистрации: 21.01.2016 |
Ну по-хорошему валидность и полноту ini проверять таки нужно
|
Re: Как можно обойти ограничение в 26 параметров? | |
---|---|
sphinx Автор Сообщений: 31184 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Цитата: Да я тоже к строке и пришел (от нее же и выходил). Отличия от передачи параметрами несущественные - лепить плюсы и разделитель, ну это ДЛЯ МЕНЯ всяко лучше, чем копипастить 100500 вызовов коллекции/массива/функции без веской на то необходимости. А так передал - и пусть функция сама создаст коллекцию. Меня устроит, другие решения как-то не подходят. Пусть даже это нехорошо и неправильно, просто а) я этим пользоваться не собираюсь всегда, порой действительно лучше/проще/удобнее сделать каким-то другим способом, если немного везения - то и не г-кодом ;) б) разработка ведется (опять же для меня!) быстрее, код проще и понятнее в сопровождении. Но если Игорь назвал это г-кодом - то значит так оно и есть, тут ничего не поделать с диагнозом. Придется с ним жить. ------------------ "Veni, vidi, vici!"(с) |
Re: Как можно обойти ограничение в 26 параметров? | |
---|---|
sphinx Автор Сообщений: 31184 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Согласен. Но может тогда, когда все работает, а этой проверки еще не было. Начинать писать прогу (или класс для работы с данными) мне не кажется разумным и правильным. А потом добавить несложно, если все полетело. ------------------ "Veni, vidi, vici!"(с) |
Re: Как можно обойти ограничение в 26 параметров? | |
---|---|
spinz Сообщений: 5263 Дата регистрации: 21.01.2016 |
А если тупо отказаться от передачи параметров в функцию, определив все требуемые параметры как глобальные переменные? Это безусловно хреновая практика, но как костыль для конкретного решения, думаю, может и сгодиться. |
Re: Как можно обойти ограничение в 26 параметров? | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
А в чем проблема-то?
- передать в функцию 100 произвольных параметров (например, 100 обьектов, их особо и не сериализируешь, не превратишь в JSON/XML) - если это не переменные, а настроечные параметры (ИНИ-файл, метаданные), то сделать так чтобы они были видны в этой функции - еще что-то Все это решается, если знать конкретные детали, а именно какой вариант исходных, передаваемых, данных - 1й или 2й, или еще какой (3й) (в фоксе все инструменты для передачи чего угодно куда угодно, внутри приложения, есть - PUBLIC, PRIVATE, _SCREEN, Empty-обьект, массив, коллекция, XML, DBF, ВК-строки, ALINES... - ВСЁ есть ) Доб. По поводу "быстродействия" способа хранения, доступа, не надо заранее париться (если обьемы данных невелики), это все можно потом проверить на реальных обьемах, переделать. Не надо ставить во главу угла быстродействие, а ставить лучше "грамотность" построения, масштабируемость (в смысле легкость увеличения количества передаваемых обьектов, или их категорий (оказывается есть "подмножества" - это и есть увеличение степени свободы на 1 ...) Исправлено 1 раз(а). Последнее : of63, 12.12.17 18:52 |
Re: Как можно обойти ограничение в 26 параметров? | |
---|---|
sphinx Автор Сообщений: 31184 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Да ты не понял. Они и так все глобально лежат в коллекции _SCREEN. Нужно определенный набор в одну форму передать, другой набор - в другую форму. Их придется перечислять. Но не хочется писать .Add() в коллекцию, заполнять массив и пр. напрямую. Удобнее же кинуть список, пусть автоматически все сам метод заполнит. Разумеется, если есть другие способы - я на них внематочно посмотрю. ------------------ "Veni, vidi, vici!"(с) |
Re: Как можно обойти ограничение в 26 параметров? | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
+100500 Главное, что бы взглянув на код, сразу было ясно что он делает. Лично для меня, легкость сопровождения, выше легкости написания) Потому внятные имена, и ясный код (не у меня, а в идеале ) Но сама задача не понятна. Пытался придумать зачем такое, и не смог толком. Ну так конкретная форма то знает об этом. Как то просится некий класс (метод) который и обрабатывает этот набор. Вопрос о самом наборе. Он неизменный, так одно. Меняется - другое. Но по любому, сам то набор уже есть? А коли есть, так натравить на него этот метод, у которого 1 параметр (указатель что используется набор из N, M,Q,W...))) А уж метод, с имеющимся набором разберется... Все же сама задача непонятна...( Тем более что не раз встречается... Например сохранить с формы все, хоть положение, хоть данные, совсем не сложно. Но речь наверное не о том? ------------------ Исправлено 1 раз(а). Последнее : Аспид, 12.12.17 19:26 |
Re: Как можно обойти ограничение в 26 параметров? | |
---|---|
spinz Сообщений: 5263 Дата регистрации: 21.01.2016 |
Вот тут не понял. Т.е. разные формы не могут напрямую обращаться к коллекции _SCREEN? Если могут, то зачем им что-то предавать? |
Re: Как можно обойти ограничение в 26 параметров? | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Форма1 ждет список параметров N (например, все, которые и так "глобально лежат в коллекции _SCREEN", ее сломают) ? Форма2 ждет список параметров M (например, все, которые и так "глобально лежат в коллекции _SCREEN", ее сломают) ? Например, передавай в каждую из форм список (через запятую или ВК) имен, которые ей нужно в себя прочитать (из _SCREEN), b это всего ОДИН C-параметр... Не подойдет? |
Re: Как можно обойти ограничение в 26 параметров? | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Передавать им надобно "к кому обращаться". Имена свойств. Я тоже не могу придумать разумного применения такого подхода. Ну "настройки" приложения обычно РАЗНО-смысловые. Скажем "отчётный период", "папка для выкладывания созданных отчётов", "имя последнего авторизовавшегося пользователя", "название организации для отчётов", "адрес веб-сервиса для проверки ИНН"... Я не представляю как можно комбинировать настолько разные значения для "вызова какой-то функции для каждого из них". Это логично делать для однотипных "настроек" - ну, если есть "папка для отчётов 1", "папка для отчётов 2", ... "папка для отчётов 100" - и в форму "А" надо передать что она будет работать с 1,3,5,7,9,...99 папками (конкретные имена которых и прописаны в настройках _SCREEN.OutputFolderNNN), а в форму "Б" что она работает к примеру с 5,10,15,85,95... Ну ладно, можно заменить "папку" на "адрес веб-сайта". Но всё одно тут основной косяк как раз в том что "однородная" информация распихана по отдельным свойствам со своими именами (и не важно даже, "шаблонные" они или абы-какие). Буде это помещено в коллекцию, или вообще записано в курсор/таблицу где дополнительно будут поле/поля "для фильтрации" - и собственно нужный "массив данных" будет получаться тривиальным запросом... И не нужно никаких "опосредований", "списка имён" и т.п. Но задача не озвучена, что это за "оно" - неизвестно, автор доволен своим решением (скорее всего костылём, но какая разница) и никаких альтернатив не хочет... ------------------ WBR, Igor |
Re: Как можно обойти ограничение в 26 параметров? | |
---|---|
spinz Сообщений: 5263 Дата регистрации: 21.01.2016 |
Тащемта подобная психология присуща наверное минимум 90% программистов - своё всегда "ближе к телу", даже когда логика подсказывает, что "своё" - это извращение |
Re: Как можно обойти ограничение в 26 параметров? | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Непонятно, что детали задачи (своего решения) так и остались непонятны на протяжении 5-ти страниц, и не мне одному. Тебе понятны?
|
Re: Как можно обойти ограничение в 26 параметров? | |
---|---|
sphinx Автор Сообщений: 31184 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Все объекты видят коллекцию _SCREEN. Но для формы Form1 нужно передать 3, 7, 11, 19 номер. То есть разработчик сам определяет множество в очередном наборе. Через заполнение массива/коллекции я знаю, но не хочу. ------------------ "Veni, vidi, vici!"(с) |
© 2000-2024 Fox Club  |