|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
назначение имен переменных и функций
Регистрация: 15.06.2005
Сообщений: 184
|
||
Просмотров: 5121
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
ИМХО, ИМХО.
Все имена делать с собственным префиксом - практически гарантия, что с соседями конфликтовать не будет. Глобальные переменные в лиспе обрамлять символами * (например, *kpblc-activedoc*, *kpblc-sysvar-list* etc) Функции (в зависимости от контекста) начинать либо с kpblc, либо с _kpblc - первые вызывать из меню и ком.строки, вторые - только из-под функций. Имена функций давать более-менее осмысленные, например: (defun kpblc-get-sysvar-list()) (defun _kpblc-norm-system) (defun _kpblc-draw-line) (defun kpblc-draw-line) - последняя вызывает _kpblc-fraw-line с передачей туда вычисленных параметров. Т.е. разделение слов производить "-". Параметры не имеют в наименовании слова "kpblc", слова разделяются "-". Локальные переменные не имеют слова "kpblc", слова разделять "_". По-моему, не очень сложно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
При всем уважении к гурам и гуриям замечу, что лечить надо болезнь, а не симптом. Существование дноименные переменных допустимо, если они являются ПАРАМЕТРАМИ функций, т.е. в defun (/)стоят ПОСЛЕ /. В противном случае, единожды поименованная и определенная в ходе сессии функция будет сохранятьсвой идетификатор до конца сессии - закрытия документа. Другой способ - использовать функцию set для присвоения "переходящего" имени разным переменным.
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
> Лентяй : с неменьшим уважением. У меня ж, насколько я понимаю, не только симптомы лечатся, но и сама хворь. Сразу и безболезненно. Таким манером избегается совпадение имен - любых.
С set у меня пока отношения не очень, так что я с уровня собственной колокольни... Лиспы не жрут память килотоннами, две-три дополнительных переменных для них (имхо) не особо критично.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
И еще одно правило. Если переменная не должна быть глобальной (т.е. ее значение не будет использоваться в других функциях), то она должна быть локальной и ее имя следует поместить в список локальных переменных. Это, как и задание уникальных имен глобальным переменным и функциям, избавит от кучи сложно отлавливаемых ошибок. |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Что-то совсем запутано:
Цитата:
В defun могут передаваться аргументы, т.к. defun всегда функция. После / записываются локальные переменные. А не ПАРАМЕТРЫ. Аргументы функции внутри функции являются локальными переменными. Их имена, как и имена других локальных переменных, могут совпадать с кем угодно. Еще могут быть локальные функции, определенные внутри defun. Их имена лучше внести в список локальных переменных. Цитата:
Цитата:
В любом случае надо избегать создания глобальных переменных, с любыми именами. Однако совсем избежать не получится, поэтому и надо давать им выделяющиеся имена, привлекающие внимание и присвоенные осознанно. kpblc привел пример правильного подхода. Собственные префиксы, стандартный вид и прочее. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
> ShaggyDoc : Фактически немного переделано под себя и собственные привычки ruCAD.
--- Добавлено: Для системных переменных использую следующую методику: (setq _osmode_ (getvar "osmode")) Т.е. идет повторение имени системной переменной, но обрамленное "_"
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
Цитата:
(defun имя (АРГУМЕНТЫ / локальные ПАРАМЕТРЫ) тело функции). Т.е. параметры стоят ПОСЛЕ "/", а то что перед - то аргументы. ShaggyDoc Цитата:
Цитата:
|
|||
![]() |
|
||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
Цитата:
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Давайте обратимся к первоисточникам. Читаем (F1): The defun function combines a group of expressions into a function or command. This function requires at least three arguments, the first of which is the name of the function (symbol name) to define. The second argument is the argument list (a list of arguments and local variables used by the function). The argument list can be nil or an empty list (). Argument lists are discussed in greater detail in Functions with Arguments. If local variables are provided, they are separated from the arguments by a slash (/). (defun symbol_name ( args / local_variables ) expressions ) Совершенно ясно написано - локальные переменные. Цитата:
|
|||
![]() |
|
||||
Цитата:
А по поводу параметров и аргументов - признаю свою неточность - ShaggyDoc как всегда абсолютно точен. |
||||
![]() |
|
||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
Цитата:
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Сейчас такое не проходит. Издательства тщательно проверяют терминологию, сверяют с документацией и не допускают подобного. Сам столкнулся при подготовке книги. Стоило где-нибудь назвать "аргументы" "параметрами" (а так многие делают), как получал замечание. И мы не ругаемся, а выясняем истину. Если будем неточны в терминологии, то запутаем кого угодно. |
|||
![]() |