Re: targrid | |
---|---|
_vit Сообщений: 5175 Дата регистрации: 29.07.2002 |
Ну, я тоже начинал в 80-х с Наири-С
Мы здесь просто выражаем свои мнения, даем советы (и не факт что на 100% верные), делимся опытом. Так что воля каждого принимать это все во внимание или нет. Я вот продолжаю находить здесь что-то новое и полезное. Меня тут недавно попросили внести изменения в мой же проект которому уже почти 20 лет. Так считай над проектом работали два разных человека. Вот тебе и командная работа. |
Re: targrid | |
---|---|
akvvohinc Сообщений: 4212 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:По крайней мере, в плане имен переменных мне проще - я за сорок лет себе не изменял - так, лишь немного устаканился стандарт. Тоже есть пара "проектов", написанных в ДОСе лет тридцать тому, но, слава богу, только для личных нужд - служат до сих пор, но я не прошу себя их дорабатывать - лишь иногда очередной раз решаю переписать... так это и тянется последние лет двадцать. |
Re: targrid | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
Как стандарт использую названиях полей:
- для таблиц справочников поле кода - ID, Название - Name - для поля ссылки на справочник - имя таблицы справочника Фреймворк - автоматом генерирует сначала Left Join, а потом в гридах форм комбобокс Еще название поля Parent. Это ссылка на Парента для ID. Исправлено 1 раз(а). Последнее : Ydin, 21.03.23 19:31 |
Re: targrid | |
---|---|
of63 Сообщений: 25244 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
С массивами есть и плюсы, по сравнению с курсором: - можно записывать в ячейки значения произвольного типа, (и длины, если речь о типе "Цэ") - можно записывать в ячейки и обьекты, тем самым немного превращая таблицу ранга 2 в многоранговую таблицу (типа, в элемент массива можно записать обьект, содержащий тоже массив(ы)) - не требует сохранения SELECT-а (кстати SELECT * FROM ... INTO ARRAY A - (не требует сохранения SELECT до и после операции) - и проще создается и заполняется в случае, когда к похожести на курсор нет показаний... просто набор строк. Я для однострочного (в кодесе) наполнения написал подпрограмму (ADDMASS), которая, при определенных параметрах вызова делает операции: очистка, добавление, возврат размера (в строках...) () доб. Именно, для передачи/приема обьекта через курсор (мемо-поле) пришлось запилить какой-то стандартный преобразователь "туда-в-сюда", оказался удобным и простым -JSON, демократичный "стандарт". Конечно, все типы - это строки, для фоксиста это неудобно. Немного приукрасил для нужд (дата, число) - оно же, курсора, ограничение - двумерность (но, скажете вы, есть связи с другими таблицами, каждая таблица - новое измерение, но не ранг) () бывает, что нужно, чтобы каждый элемент (переменная, элементы "вектора", матрицы, "тензора") могли содержать себе подобный обьект, (про сам себе тождественный обьект не будем), это нужно, удобно... Доб. Про обьект - имел ввиду в широком смысле, про "копию" обьекта, если случится сослать на сам обьет, который его содержит... ) Старая фишка, разберетесь, если будете ... Тоже упрощал общение с SQL-сленгом (фоксовым и не), пока есть такое () мтк кнопка code и кнопка спойолер должна сработать негласно, или спросить юзера "не за спойрелить ли?" () Для этого родил понятие "копировщик" (oCOPY(m.o)) обьекта, а не m.x = m.o (вы знаете, что это не клонирование обьекта... надеюсь) Исправлено 9 раз(а). Последнее : of63, 21.03.23 22:10 |
Re: targrid | |
---|---|
akvvohinc Сообщений: 4212 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Ты привел пример массива: iМатрешкиЦвет iМатрешкиКод iМатрешкиВес А я и написал - "для такого случая я бы просто создал курсор, а не массив". Цитата:С курсорами есть и плюсы по сравнению с массивами. Мне работать с курсорами комфортнее, а поэтому во всех случаях, когда массив необязателен, пользуюсь курсорами. А для курсора для всего этого и писать ничего не нужно. Цитата:Вроде определение размерностей массива не требует написания UDF. Наверно всё же не сам объект, а ссылку на него. |
Re: targrid | |
---|---|
of63 Сообщений: 25244 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
про последнее замечание - да, можно записать и просто ссылку на обьект, а можно и заморочяться на предмет создания его клона
() про обьекты в фокс, и в других ЯП, типа См, Серега, мы с тобой найдем ОЯ Ты слышал про "счетчик ссылок" на "обьект" в среде фокса, про его контроль над обьектными переменными? Исправлено 2 раз(а). Последнее : of63, 21.03.23 22:18 |
Re: targrid | |
---|---|
akvvohinc Сообщений: 4212 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Что ты называешь клоном объекта? Цитата:Краем уха. Исправлено 1 раз(а). Последнее : akvvohinc, 22.03.23 03:15 |
Re: targrid | |
---|---|
of63 Сообщений: 25244 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Это хор. Важнейшая деталь в использовании (в понимании) обьекта в фоксе, да и в Си (в Си - это просто адрес, фокс же "отслеживает" использование, этого адреса в подпрограммах, и при обнулении "счетчика использования" очищает (удаляет из памяти) этот обьект, это большая помощь в с его стороны программировании с использованием "обьектов"). Фрагментация памяти - тоже хорошая головная боль у програмеров, в фоксе мы этим не болеем...
() Доб - обьект, это в простом случае "Empty"-обьект (обьект без свойств). Вы его наполняете ( =ADDDPROPERTY(обьект, имя, значение)), и можете эту конструкцию передавать через элемент массива (но не через ячейку курсора... ну так назвал, по аналогии с ячейкой Экселя) > Что ты называешь клоном объекта? ссылка на обьект это: m.o = CREATEOBJECT("Empty") && обьект m.x = m.o && это ССЫЛКА на обьект, не клон другой пример m.o = CREATEOBJECT(@Empty") && обьект m.x = oCOPY(m.o) && эта подпрограмма делает CREATEOBJECT("Empty") и наполняет его свойствами обекта m.o это клон Исправлено 5 раз(а). Последнее : of63, 22.03.23 17:11 |
Re: targrid | |
---|---|
akvvohinc Сообщений: 4212 Откуда: Москва Дата регистрации: 11.11.2008 |
Ну уж нет. 1) В первом случае обе переменные - O и X - являются ссылками на один и тот же объект. То есть они обе хранят одно и то же значение - адрес одного и того же объекта! И ты можешь это легко проверить обычным сравнением: ? m.X == m.O && .T. 2) Во втором случае переменная O является ссылкой на первый объект, а переменная X является ссылкой на второй объект, являющийся "клоном" первого. ? m.X == m.O && .F. И если любую из этих переменных ты закинешь в элемент массива, в элементе будет храниться ссылка на объект, но копия объекта не появится (в отличие от закидывания в массив обычной переменной). А поэтому тему одного из озвученных преимуществ массива считаю по-прежнему не раскрытой
Ну, или оно должно звучать иначе: можно записывать в ячейки и ссылки на объекты Исправлено 2 раз(а). Последнее : akvvohinc, 22.03.23 18:58 |
Re: targrid | |
---|---|
of63 Сообщений: 25244 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
1) В первом случае обе переменные - O и X - являются ссылками на один и тот же объект.
То есть они обе хранят одно и то же значение - адрес одного и того же объекта! И ты можешь это легко проверить обычным сравнением: ? X == O && .T. 2) Во втором случае переменная O является ссылкой на первый объект, а переменная X является ссылкой на второй объект, являющийся "клоном" первого. ? X == O && .F. И если любую из этих переменных ты закинешь в элемент массива, в элементе будет храниться ссылка на объект, но копия объекта не появится (в отличие от закидывания в массив обычной переменной). А поэтому тему одного из озвученных преимуществ массива считаю по-прежнему не раскрытой. > Понял вопрос так - "массив - это как курсор, в курсор я сохранить обьект не могу, а оппонент говорит, что в массив это можно" Примерно ты прав - обьект сохранит в ячейку курсора невозможно. Я про это и говор.ю - что сохранить. В ячейку массива можно сохранить ссылку на обьект, и потом ее прочитать и использовать (если обьект жив), в ячейку курсора же нельзя сохранить ссылку на обьект ни под каимм видом, ссылка на обьект не имеет типа (тип "О", но это ни о чем)... То, что можно (если обьект простой) сохранить и восстановить его через Мемо-поле (ЖиСоном)Ю то это "клонирование"... > одного из озвученных преимуществ массива если ты об этом одном... ) () ну, пусть это будет так путано, в реале просто все, как и в Си Исправлено 1 раз(а). Последнее : of63, 22.03.23 19:09 |
Re: targrid | |
---|---|
akvvohinc Сообщений: 4212 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:В принципе верно. Но уверен, что умельцы найдут способ получать адреса объектов в виде фоксовых строк (чисел) и сохранять в таком виде куда угодно. Ну, и обратная операция не должна быть сложнее. Когда-то (ещё в ДОСе) я сам дописывал необходимые мне функции для Фокса с помощью пакета LCK (Library Construction Kit). Создавать FLL-файлы не приходилось, но люди-то пишут. Интересно, что по какой-то причине сами разработчики решили исключить сохранение переменных, содержащих ссылки, из обработки команд SAVE TO и RESTORE FROM: Object type variables cannot be saved to a variable file or memo field. Исправлено 1 раз(а). Последнее : akvvohinc, 22.03.23 20:04 |
Re: targrid | |
---|---|
ssa Сообщений: 13007 Откуда: Москва Дата регистрации: 23.03.2005 |
Это не клон. Это копия свойств объекта. А использованный тобой способ "клонирования" называется подгонкой результата с помощью частного случая. ------------------ Лень - это неосознанная мудрость. |
Re: targrid | |
---|---|
of63 Сообщений: 25244 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
А клон тогда что такое? Как сделать клон обьекта в твоей терминологии )
() не спускаемся на некий "запрет клонирования квантовых обьектов", шутка ( ru.wikipedia.org ) Исправлено 2 раз(а). Последнее : of63, 22.03.23 20:11 |
Re: targrid | |
---|---|
ssa Сообщений: 13007 Откуда: Москва Дата регистрации: 23.03.2005 |
Не найдут. Цитата:Ибо вот эта самая обратная операция бессмысленна. Ссылка на объект есть адрес в ОПЕРАТИВНОЙ памяти компа. Чтение из поля таблицы этого адреса в общем случае никак не создаст объект, ссылка на который сохранялась. Особенно в системе, в которой этот самый адрес постоянно плавает/меняется менеджером памяти и вычисляется непосредственно перед использованием этой ссылки. Вспомни, в LCK перед использованием всяких штук надо было сначала получить адрес этих штук по их хендлеру. ------------------ Лень - это неосознанная мудрость. |
Re: targrid | |
---|---|
of63 Сообщений: 25244 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Серега, мы не о таком буквальном смысле обьекта (как ссылка на пддрес/область в оперативной памяти) имели ввиду, ну... я имел... Я имел ввижу обьек в фоксовом смсле, которые можно копировать, читать..., но нельзя получить "адрес" в си/ассемблерном смысле, его нет...
> Но уверен, что умельцы найдут способ получать адреса объектов в виде фоксовых строк (чисел) и сохранять в таком виде куда угодно. Не найдут. Есть еще в ЯП фокса указатель - улитка "@" > в виде фоксовых строк (чисел) и сохранять в таком виде куда угодно. () естественно, это лежит в памяти компа, по какому-то адресу, в открытом виде, как у всех программ. Исправлено 2 раз(а). Последнее : of63, 22.03.23 20:25 |
Re: targrid | |
---|---|
akvvohinc Сообщений: 4212 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Речь шла о другом: 1) объект существует; 2) ссылка на него может храниться в скалярной переменной; 3) эту же ссылку можно "положить" в элемент массива, свойство чего-то там... 4) но нельзя сохранить ссылку в поле курсора (таблицы). Цитата:Я уже не помню всё настолько хорошо. Пришлось посмотреть исходники (один из них - под спойлером), и, насколько я успел вспомнить и понять, хендлеры использовались лишь для доступа к значениям строковых переменных (если вести речь только о переменных). То есть цепочка получается такая - ссылка на переменную, которую принимает твоя функция - это лишь ссылка на то место (структуру), где лежит описание переменной, одним из полей которого (parm->p[1].val.EV_HANDLE) является адрес, где находится собственно значение. И изменение адреса, где лежит собственно значение, не обязательно скажется на адресе самой переменной. И это при желании можно было бы проверить на досовском Фоксе, если компилятор Watcom C и сейчас будет работать на какой-то системе. Если адрес действительно меняется, то найти способ его извлечь всё равно можно, хоть и бессмысленно. Думаю, я и сам мог бы это сделать при наличии пакета, аналогичного Library Construction Kit, и инструкции пользователя. Вот одна из наших функций, использовавшаяся в некоторых случаях вместо родной SEEK() (была переделана из обычного PRG для ускорения работы - тогда это было актуально - расчеты шли всю ночь): Любой, кто сталкивался с Си и знает Фокс (функция _Evaluate() может выполнять родные команды Фокса), разберется в коде. Но даже если ссылку на объект сохранить в файле/поле, и даже если адрес объекта не изменится, то без доработки Фокса (может, Чен?) это всё равно бессмысленно - ведь если ссылка на объект не будет параллельно храниться и там, где требуется Фоксу (в переменной и проч.), то объект самоликвидируется. [i]Исправлено 5 раз(а). Последнее : akvvohinc, 23.03.23 05:19 |
Re: targrid | |
---|---|
of63 Сообщений: 25244 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> Но даже если ссылку на объект сохранить в файле/поле, и даже если адрес объекта не изменится,
Сергей, ты не прав ) Доб Какой в ж. "адрес" "если ссылку на объект сохранить в файле/поле" > и даже если адрес объекта не изменится как он может измениться, в ЯП? > может, Чен?) Чен тут не при делах, дело в понимании программирования на чужих ЯП... просто, надо их понять Исправлено 2 раз(а). Последнее : of63, 24.03.23 22:27 |
Re: targrid | |
---|---|
ssa Сообщений: 13007 Откуда: Москва Дата регистрации: 23.03.2005 |
Молча. Ты вообще хоть как-то знакомился с устройством фокса внутри? Если думаешь, что фокс работает с переменными как С, Pascal и иже с ними компилируемые языки, то очень сильно ошибаешься. ------------------ Лень - это неосознанная мудрость. |
Re: targrid | |
---|---|
of63 Сообщений: 25244 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> Ты вообще хоть как-то знакомился с устройством фокса внутри? Не интригуй, просто говори, то, чего мы еще не знаем. |
Re: targrid | |
---|---|
of63 Сообщений: 25244 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Если про систематическую "очистку памяти" - это не важно... (хотя важно, но не очень... ) )
()() хоть как-то знакомился с устройством фокса внутри? Серега! И снаружи, и З_аодно, раз ты знаешь про внутренности фокса, расскажи, как устроена память ОС , когда мы начинаем плодить/уничтожать "обьекты/переменные", выскажи свою версию, как надо было делать, и как не надо... )... Это про "фокс"... Ребята сделали рабочий "продукт", все работает... и не надо гнать, что "я мог бы сделать более збс".. ну сделай, это делает пока только Чен... Исправлено 2 раз(а). Последнее : of63, 25.03.23 02:08 |
© 2000-2024 Fox Club  |