| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Безграмотность лиспописателей

Безграмотность лиспописателей

Ответ
Поиск в этой теме
Непрочитано 24.05.2010, 11:47
Безграмотность лиспописателей
gomer
 
строю, ломаю
 
Украина
Регистрация: 03.04.2008
Сообщений: 5,515

Это, конечно, личное дело каждого пишущего, но мне, если честно, уже надоело видеть в кодах названия переменных и польз. функций, написанные с ошибками
Просмотров: 14750
 
Непрочитано 26.05.2010, 19:14
#41
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Тема флудильная. Профессиональные программисты такие никогда не поднимают - для них просто правилом являются стандарты именования функций, объектов, методов, переменных, полей баз данных и прочего. Так же, как оформление кода.

Причем стандарты могут быть разные, в зависимости от языка, среды программирования, а также с учетом определенных корпоративных требований. Вот сами стандарты - обсуждаются. Но это иной уровень - стоит ли, например, использовать "венгерскую нотацию", а вот "privet mir" обсуждению не подлежит.

Обсуждать же "безграмотность" это - всё равно, что спорить "надо ли мыть руки перед едой". Тем более, что всегда найдутся любители сообщить, что "я не мою, и ничё".
ShaggyDoc вне форума  
 
Непрочитано 27.05.2010, 10:00
#42
E-degtyarev

Помогаю, кому делать нечего.
 
Регистрация: 27.03.2009
Русская деревня
Сообщений: 394


Vov.Ka, с удивлением обнаружил, что (setq Точка (getpoint)) работает!!!
E-degtyarev вне форума  
 
Автор темы   Непрочитано 27.05.2010, 15:50
#43
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Вот, кстати, пример "безграмотной" переменной...

Код:
[Выделить все]
(if (= "INSERT" (dxf 0 BLK_ENT2))
		  (setq
			NAM_2 (dxf 2 BLK_ENT2)  ; new block name
			LYR_2 (dxf 8 BLK_ENT2)  ; new block layer
			ROT_2 (dxf 50 BLK_ENT2) ; new block rotation
			XSF_2 (dxf 41 BLK_ENT2) ; new block X-scale
			YSF_2 (dxf 42 BLK_ENT2) ; new block Y-scale
			ZSF_2 (dxf 43 BLK_ENT2) ; new block Z-scale
	         *dummy*(prompt (strcat "\nBlock \"" NAM_2 "\" selected."))
		  )
		  (setq
			#BLK2 nil
	   	 *dummy*(prompt "\nSelected object is not a Block. Try again.")
		  )
		)
Переменная *dummy* позволяет вместо функции progn использовать setq
gomer вне форума  
 
Непрочитано 28.05.2010, 09:15
#44
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Цитата:
Сообщение от gomer Посмотреть сообщение
Переменная *dummy* позволяет вместо функции progn использовать setq
сам-то понял что написал?
Это - не "безграмотность", а творческий подход!
Евгений А. вне форума  
 
Автор темы   Непрочитано 28.05.2010, 14:47
#45
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Евгений А. Посмотреть сообщение
сам-то понял что написал?
gomer вне форума  
 
Автор темы   Непрочитано 07.06.2010, 16:55
#46
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Вот накопал про названия переменных Любопытно
Цитата:
AutoLISP lessons
By; David A. Seibert

LESSON5

...

VARIABLE NAMING:

When we discussed comments in lesson 3, we neglected to touch on the
easiest method of commenting of all; variable names. If you use proper
variable names, much of your code can be self-documenting. You need only
add comments to code which is not clear simply by reading it.

Variables can be named anything you want providing the first character
is alphabetic, and you don't use the reserved characters from lesson 2.

Many AutoLISP programmers try to keep variable names to (6) six
characters or less. This is due to the way variables are stored in
AutoLISP. If a variables name is less than 6 characters AutoLISP only
requires (2) two nodes to store the value. If you make the variable name
longer than (6) six characters, AutoLISP stores the value in one node
and stores a pointer to the name in the other node. The name itself is
stored in memory taken from the heap for string storage. Heap space is
limited and that is why some programmers try to keep variable names
short.

Two things have happened that makes this rule not so carved in stone as
it used to be. The advent of virtual memory and learning how to program
cleanly have done much to solve the problem of running out of memory. I
can't do much about the amount of memory in your comuter or the amount
of memory AutoCAD needs, but I can show you how not to run out of memory
by programming in a clean manner.

Anyway, back to naming variables.

Naming a variable is not like naming the family pet, you can't choose a
name cause it's cute or it's what the variable looks like. You need to
choose names based on what it is the variable holds. You must look at
the variable and its name as being the same thing. If you can't tell
what the variable is, maybe you don't need the variable anyway.

If a variable holds the point for a line, state that in the variable
name. First tell which line, and then tell which point. Variables can be
named well or they can be named badly, it's all up to you.

Good:

CenterLineStart
CtrLnStrt
CtrLnEnd

Bad:

C1 ;Start of centerline
C2 ;End of centerline

The bad variable names have been made sightly more palletable by the use
of comments to say what they are, but the good variable names are much
more discriptive and require no comments. Anyone who has programmed for
awhile knows comments rarely come easy and sometimes not at all. It is
better to give your variables names which do not need explained, so a
missing comment later will not lead to confusion about what the variable
is holding.

Also note that end-line comments no matter how well done, clutter up
code and make it harder to read. If you can avoid using end-line
comments, you will be much better off.

Some times you have many variables that seem to hold the same type
values. They may seem the same but there is always something different
about them that the name can tell you.

Good:

TapDrillCenterLineStart
TapDrCtrLnStrt
TapDrCtrLnEnd

TapCenterLineStart
TapCtrLnStrt
TapCtrLnEnd

Bad:

TDCS
TDCE
TDS
TDE

I have seen programmers go as far as giving many pages of comments to
explain what each of thier variables was supposed to hold. Having a
decoder ring is no substitute for proper variable naming. If you give
full variable names you will have alot less commenting and alot easier
time when hunting problems.


Index variables ...

Indexes through a loop are one of the areas where it is sometimes
difficult to come up with a name. Many programmers have a name they give
to all indexes, such as Index, Idx, Ndx, or some such thing that they
are comfortable looking at. They know when they read thier code what
these things are, but others may not.

If you are going to use short names for indexes be sure to tell what it
is that you are indexing through.

Good:

PointNdx
ListNdx
FileNdx

Bad:

x
Idx
Ndx

An index variable is like any other variable and needs a proper name to
be truly understood.


Status variables ...

Status variables should be given names better than "flag". Everyone
seems to use flag for status variables. The first thing we have to do to
give truly meaningfull names to variables, is get away from thinking
about our problems from the viewpoint of the computer. A flag tells if
something is right or wrong, it should be given a name that reflects the
item we are checking.

Good:

FileDone
PrintDone
SortDone

Status variables are not used extensively in AutoLISP programming, but
if you use them, give them real names.


Naming guidelines ...

Variables should be named in a manner that also identifies thier scope
and / or type.

GLOBAL variables should be identifiable as such by reading thier name.
Some people use prefix or suffix notations to accomplish this. An
example would be to add a g or g_to the beginning of the variable name:

gScrewList

This identifies the variable as a list that is available to all the
functions in your program. I am not a fan of putting the "_" character
in variable names as a seperator. I prefer the nameing convention where
you capitalize the first letter of each word or abbreviation in the
variable name.

CONSTANTS are normally capitalized as a way of identifying them. They
stand out from the rest of your code so you know they are a constant.

INPUT variables, which are parameters to a function, should not be
modified inside the function. It is recommended that you identify input
variables so if you see one getting modified you can do something else.
It will be alot easier to read your code and tell which variables are
parameters if you identify them in the name. An "i" or "ip" may be
prefixed to the name to identify them.
gomer вне форума  
 
Непрочитано 07.06.2010, 17:01
#47
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,832


Я любую переменную, названную как gFileHadle нажатием всего трех клавиш на клавиатуре в vlide моментально приведу к виду gfilehandle.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.06.2010, 23:44
#48
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Зачем?
gomer вне форума  
 
Непрочитано 07.06.2010, 23:49
#49
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,832


Не зачем, а почему
Потому, что в AutoLISP понятие регистрозависимости отсутствует, т.е. переменные adoc, Adoc, aDoc и т.п. будут пониматься одинаково. Потому, что есть такое "волшебное" сочетание клавиш - Ctrl + Alt + F (форматировать код в соответствии с установленными настройками). А какие настройки будут у получателя кода - известно только ему.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.06.2010, 00:08
#50
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
в AutoLISP понятие регистрозависимости отсутствует
Метод существует для програмиста, а не для интерпретатора... В частности для понимания длинных названий методов и свойств в объектной модели
gomer вне форума  
 
Непрочитано 08.06.2010, 04:22
1 | 1 #51
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Вот накопал про названия переменных Любопытно
Это для совсем бестолковых и начинающих. Азбука, но "писатель" должен знать не только азбуку. Не всё же он будет писать "мама мыла раму".

Цитата:
Метод существует для програмиста, а не для интерпретатора... В частности для понимания длинных названий методов и свойств в объектной модели
Программист - это человекообразное существо. Иногда даже человекоподобное. А человеку свойственно ошибаться. Вот ошибки программиста и надо предотвращать

Алексей правильно написал про регистр. В VLIDE может быть настройка перевода символов в нижний регистр. Будет применено форматирование - и тщательно придуманные имена, в которых "слоги" выделены регистром, превратятся в нечитаемые, все в одном регистре. А обратную операцию придется вручную делать.

И не надо думать, что "со мной этого не случится".

Поэтому мы это учитываем. Например, используем длинные (иногда очень длинные) имена функций, в которых разделителем является дефис: ru-conv-millimeter-to-unit, ru-3d-point-by-2-points-and-dist, dwgru-get-number-as-radius и т.п.

А в именах переменных разделителем делаем знак _ чтобы визуально их выделять. У имен функций делаем префикс, например "ru-" или "kpblc-". Это предотвращает конфликт имен в разных программах.

Все имена в нижнем регистре - учитывается еще и то, что функции попадают на Linux-сервер в виде файлов, где регистр имеет значение.

Заодно я не использую в именах символ ">", хотя он и напрашивается. Это потому, что тексты функций приходится публиковать в XML, а там это специальный символ.

И так далее....
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 08.06.2010, 07:50
#52
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Все имена в нижнем регистре - учитывается еще и то, что функции попадают на Linux-сервер в виде файлов, где регистр имеет значение
Расскажите поподробнее,пожалуйста Я понимаю так, что лиспы, хоть и лежат на линуксе, загружаются в интерпретатор в среде уиндоуз...
Просто это самый "короткий" способ... и кто мешает делать бекап?
gomer вне форума  
 
Непрочитано 08.06.2010, 14:22
#53
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Я понимаю так, что лиспы, хоть и лежат на линуксе, загружаются в интерпретатор в среде уиндоуз.
Файлы лежат на веб-сервере. Н в какой интерпретатор они не загружаются. Каждая функция (а их около 3 тыс) - файл. Соответственно и каталоги. Всё только в нижнем регистре - раз и навсегда, для простоты и однозначности. Потому что ещё и FTP-клиенты могут автоматически имена в нижний регистр переводить.
ShaggyDoc вне форума  
 
Непрочитано 08.06.2010, 14:51
#54
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Извиняюсь за отклонение от основной темы...
Цитата:
Файлы лежат на веб-сервере
Сергей Александрович. Правильно ли я понял, что часть файлов (функций) вы динамически подгружаете на клиентские машины с ftp (http) сервера. Если да, и если не секрет, какова основная цель этой затеи?
Или это для Update?
__________________
...в шее моей жилы железные, и лоб мой - медный...

Последний раз редактировалось Pastor, 08.06.2010 в 15:29.
Pastor вне форума  
 
Непрочитано 08.06.2010, 14:59
#55
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,832


Я сейчас тоже пришел к такому (зря я умных людей сразу не послушал). Основная проблема (по крайней мере у меня) - обновление функционала, исправление ошибок и т.п. Замучаешься бегать по нескольким десяткам клиентов - пускай уж лучше с сервера грузят все что можно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.06.2010, 15:59
#56
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Вообще ничего не понимаю!!!!!!!!
Как может измениться содержимое файла?????
А если он зашифрован???
А если он скомпилирован?
А если это arx или нет???
Я об этом
ps И как это не загружаются?

Последний раз редактировалось gomer, 08.06.2010 в 16:07.
gomer вне форума  
 
Непрочитано 08.06.2010, 16:35
#57
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Сообщение от Pastor Посмотреть сообщение
Извиняюсь за отклонение от основной темы...

Сергей Александрович. Правильно ли я понял, что часть файлов (функций) вы динамически подгружаете на клиентские машины с ftp (http) сервера. Если да, и если не секрет, какова основная цель этой затеи?
Или это для Update?
Файлы исходников лежат не для загрузки в AutoCAD, а для ТехКомуПоложено. Это просто файлы - на многих сайтах так делается.

Для работы используются откомпилированные файлы. В принципе их можно автоматически загружать из Интернет для обновления. Технически - ничего сложного. Но у нас пока народ к этому не готов - не все имеют доступ, козни местных админов и прочее. Поэтому периодически сами скачивают инсталляционные сервис-паки.
ShaggyDoc вне форума  
 
Непрочитано 08.06.2010, 16:38
#58
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
..... Основная проблема (по крайней мере у меня) - обновление функционала, исправление ошибок и т.п. Замучаешься бегать по нескольким десяткам клиентов - пускай уж лучше с сервера грузят все что можно.
Алексей, ты имеешь ввиду клиентов своей сети или уличных?
Если свои, то это обновление проблема твоего сисадмина. Вот я сейчас читаю из памятки своего:
"Обновления выполняемые при загрузке ПК пользователя"
.....
п.4. rem Обновление Паркса
start \\ХХХ-server\Updates$\ParUpd.exe
rem Обновление Паркса из папки \\ХХХ-server\updates$\PARKS
, где ParUpd.exe выполняет простое копирование файлов на ПК пользователей из папки с обновлениями.
....
Если уличные, то кто будет делать им обновление, если они не хотят?
А если хотят, спасает какой-то обычный, присланный тобой патч, по-типу самораскрывающегося архива.
Уж больно не люблю я независимые от меня обновления, по-типу MS Windows...
P.S. Сеть существует для того, чтобы бегать вдоль неё с дискеткой
PPS. Пока писал ShaggyDoc дал разъяснение своей позиции. Согласен с ней
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...

Последний раз редактировалось Alan, 09.06.2010 в 15:54.
Alan вне форума  
 
Непрочитано 09.06.2010, 10:41
1 | 1 #59
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


.. потраченный час моего времени...
лучше б написали чего полезного ....
-> gomer : такое чуство что вы - преподаватель в каком-нибудь институте, и вам захотелось "поучить" теории трудяг на этом форуме. Дайте плз в эту ветку ссылку на пример Вашей программы, обсудим грамотность, ... да и полезность заодно...
kakt00z вне форума  
 
Автор темы   Непрочитано 09.06.2010, 15:37
#60
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


>kakt00z
А я то думаю, рабочий день в разгаре, а тут народу прудпруди...
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Безграмотность лиспописателей

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск