|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
25.01.2021, 21:28 | #1 | |
Сброс переменных: глобальные переменные vs error handling
Регистрация: 17.01.2014
Сообщений: 97
|
||
Просмотров: 3183
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
Есть третий вариант. Как пример, который у меня существует уже много лет:
Код:
Код:
P.S. На будущее старайся не использовать глобальные переменные. Лично у меня это указатели на приложение ACAD, текущий документ, пространство модели документа - и, пожалуй, все. Хотя нет, вру - иногда приходится запоминать результаты длинных запросов к БД в глобальной переменной уровня документа (а то и приложения), но это не потоково, а достаточно редко и разово.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 17.01.2014
Сообщений: 97
|
Алексей, спасибо за комментарий, код на досуге попробую поюзать. А в чем проблема частого использования глобальных переменных? Ну, помимо того, что имена переменных могут пересечься со всеми вытекающими (что, впрочем, решается назначением им каких-нибудь замысловатых имен)? Замусоривают память? Ну так вроде сейчас не девяностые годы, ОЗУ уже не мегабайтами измеряются, так ли актуальна проблема?
И все же, хотелось еще услышать твоё мнение об error handling. Насколько понимаю, ты его не котируешь? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
Почему не котирую? Очень активно. Просто помню о его старом ограничении - не больше 9 уровней вложенности (словил как-то на 2006, с тех пор стараюсь подобного избегать; повторять эксперимент не хочу).
На данный момент очень редко превышается 4 уровень - и то на кусках, которые реально могут вывалить ошибку и обрушить весь код. С глобальными переменными у меня была оочень веселая ошибка - всего в одном месте вмесо pr написал pt (сократил, блин, prop / property), потом полдня искали причину некорректного поведения достаточно большого куска. С тех пор правило: короткие имена - только внутри анонимных функций, локальные переменные имеют внятные обозначения, глобальные переменные идут лесом. И каждая функция обязательно подвергается проверке через Ctrl+Alt+C. P.S. Про переопределение *error* можешь даже не спрашивать Не пользуюсь уже лет 8, наверное (если не больше).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 18.01.2021
Сообщений: 404
|
"В связи с чем, у меня вопрос к гуру лиспа, и не только.
Какими методами пользуетесь лично вы? Какой подход более рационален? Если возможно, хотелось бы услышать мнение с аргументацией pro et contra." Сразу: я далеко не гуру. Просто в свое время (к концу 90х) написал ооочень много разных лиспов и в силу необходимости, и со скуки. Например, авто переводчики на аглицкий (с удаленным участием отдела переводов), разные анимации по типу "тараканы от курсора", редактор текстов пачкой собственных бигфонтов, всякое типа нынешнего спдс, автомат.заполнение весов спецификаций с генерацией "выборки стали" без ексел и не помню уж чего еще. И все без vla-, до которого тогда не дорос. С литературой тогда был совсем швах. Исключительно личный опыт, приобретенный методом тыка. При смене версий имел несколько раз засады из-за изменения состава и имен системных переменных, в том числе и досовских\виндовских. В какой то момент перегорел и послал это дело подальше. Потому рекомендация: без крайней необходимости не общаться со средой системы. Я считаю, что "любителям" лучше пользовать тот метод, который автору проще/понятнее. В моем случае это ваш первый. Лучше больше понятного кода, чем компактный код, но лишний напряг интеллекта. А в принципе, если б не бросил, то приближался к решению Кулика. --- Сейчас под финал вернулся, смотрю что актуально на сегодня. С печалью вижу, что "спецификация\выборка" актуально по сей день... Очень лень, но похоже реанимирую. Мне странно смотреть, как молодежь тыркает "формулы" в ячейки таблиц, когда у компа и так под носом все нужные данные.. Хорошо хоть "профили проката" реализовали в СПДСах, и то - прогресс. А еще смотрю полная печаль в excel… с интерполяцией например. Я сейчас про анналы сайта. |
|||
|
||||
Цитата:
1) системные переменные лучше вообще не трогать, поскольку в своём большинстве они придуманы для разного поведения конкретной команды (группы команд) автокада. 2) использование командных методов в программировании на лиспе, при своей кажущейся простоте не есть правильно и тут логичнее всего юзать по-полной activex, который почти всегда позволяет с лёгкостью обойти системные переменные. хотя есть очевидные случаи, когда без них не обойтись, например если нужно что-то заштриховать. 3) использовать переопределение *error* - имхо полное кощунстсво, поскольку привязывает каждый код к этому переопределению, даже возможно тогда, когда это и не нужно. и последствия этого переопределения не очень желательны, когда что-то пошло не так. лучше использовать отлов ошибок опять же на activex. |
||||
|
||||
Регистрация: 17.01.2014
Сообщений: 97
|
Кулик Алексей aka kpblc,
Спасибо, ситуация с глобальными переменными прояснилась. У меня, к сожалению, пока не получается отказаться от их использования, в силу крайне скудных, на данный момент, познаний в программировании вообще, и лиспе в частности. Приходится пользоваться чем знаю и что умею, а другие пути еще предстоит изучить. Сейчас приходится использовать достаточно много глобальных переменных в которых, как правило, сидят списки с определением различных стилей (текста, размеров, мультивыносок, таблиц), которые я, в случае необходимости, прогоняю через определенную функцию создания стиля. Профессиональные программисты, наверное, сочтут это за порочную практику. Петр-и-Алекс, спасибо, за столь развернутый ответ. Метод проще и понятнее, имееется в виду (setq OldVar (getvar ...)) (progn ...) (setvar ... OldVar)? Но что, если в процессе выполнения кода случится ошибка (например, пользователь нажимает Esc)? Отката к исходному состоянию переменных в таком случае не происходит. koMon, activex круто юзать, если умеешь конечно, но для меня это пока недостижимый хай-левел. На счет переопределения *error* усвоил – исключу, пожалуй, этот метод из практики на данном этапе. Спасибо за комментарий. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
Если есть время и желание - советую найти "САПР на базе AutoCAD" (на форуме где-то лежит в достаточно хорошем качестве). Скачать, прочитать, попробовать применить.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 18.01.2021
Сообщений: 404
|
Уважаемый, хочу обратить внимание на такое понятие из жизни программистов, как "выгорание". Это дело существует. Особенно оно ранит "любителей". В том числе и потому, что у них нет (как правило) поддержки административной.
Мой вам искренний совет: - старайтесь сделать законченный продукт. Тот, который работает и решает поставленную задачу. Даже если Вы видите, что его "можно сделать много лучше", на первом этапе просто "достигните финиша". Потом будете шлифовать по мере возможностей. - подумайте, как можно ввести работающий продукт в практику. Это не менее творческая задача. Если это не удается в желаемом масштабе - хотя бы опубликуйте здесь. - при этом, имейте ввиду такие засады: работодатель может выразить неудовольствие тем, что вы вообще этим занимаетесь, ващей публикацией вне конторы. - мне прилетало неудовольствие от самого автодеска… к примеру Юридическая сторона подобного вида хобби тоже тема любопытная... больше сейчас говорить не буду Но в любом случае, удачи Вам! и слегка завидую Вам в том, что Вы в начале этого пути |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
Цитата:
Но одну глобальную для сохранения и восстановления списка системных переменных использовать стоит. Это понадобится для обработки ошибок. Цитата:
Но зато в active-x возможно сделать настоящий (в отличие от *error*) обработчик ошибок. Любых - хоть прерывание пользователем, хоть какие-то действия программы, вплоть до деления на ноль. Это аналог try.... except... end в "больших" языках. Для этого имеются функции vl-catch-all-apply, vl-catch-all-error-p, vl-catch-all-error-message. Они работают в связке, для простоты применения их лучше обернуть в свою функцию наподобие Код:
В результате в начале и конце любой функции-программы можно вставить собственную библиотечную функцию и навсегда забыть про обработку ошибок. Например у меня делается так: Код:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 18.01.2021
Сообщений: 404
|
Понял.
Тема в сторону: столько лет прошло, а то, что я вижу из-за плеча бойцов - никакого "сапра" нет... в массовом использовании по крайней мере. Есть более менее актуальный кад + СПДС... Не таким мечталось будущее 20 лет назад. Я про строительное проектирование на своей поляне. Надеюсь где то САПР существует. Впрочем, да, даже видел его в бою. |
|||
|
||||
Регистрация: 18.11.2019
Сообщений: 1,526
|
Цитата:
Цитата:
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,053
|
Offtop:
Цитата:
|
|||
|
||||
|
||||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Самопроизвольно меняются значения системных переменных PRESELECTIONEFFECT и SELECTIONEFFECT | Denger777 | AutoCAD | 2 | 14.05.2016 22:58 |
Выборка локальных переменных в функции | wluk1958 | Программирование | 7 | 24.06.2012 05:58 |
Что за системные переменные plimmin и plimmax? | Кулик Алексей aka kpblc | AutoCAD | 5 | 13.06.2012 10:20 |
Программно получить список системных переменных (без вывода в текстовый файл) | Ax3 | Программирование | 3 | 27.12.2010 16:29 |
Значение переменных, "спрятанных" в чертеже | Airiz | Программирование | 11 | 05.06.2007 17:53 |