Глобальные переменные

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
#1
Уважаемые программисты!

Потрудитесь ответить на мой вопрос и, если можно, обосновать.

Насколько оправданны глобальные переменные вообще и на уровне формы в частности.
Например, иметь на форме глобально ws, uidoc, doc, session, db.
Оправданно ли это или засирание кода?

Я пока не буду высказывать свою точку зрения, дабы никого не склонить в какую-либо сторону.
Спасибо!
 

fedotxxl

Well-Known Member
09.11.2005
614
0
#2
Для: Omh
Я выносил в глобальные переменные session и db...
Встретился с таким глюком - глобальные переменные заполнялись через Initialize. Если использовать метод из данной библиотеки при помощи execut'a, то Initialize не запускался... по-моему так

Вобщем, по моему мнению глобальные переменные лучше не использовать
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
#3
Вот ещё был такой случай (не понимаю сейчас был ли это глюк или всё-таки понастоящему).
LS'ный Shared Action юзал переменную doc, которая была задекларена на форме, куда он был помещён.
Т.е. на рантайме он подхватывал этот объект и начинал с ним работать.

Помню тогда хотелось вырвать руки программеру создавшему это.
Правда, сейчас мне кажеться, что это невозможно.
Но там скрипты были 1999 года :)
 
A

Azrael

Гость
#4
<!--QuoteBegin-Omh+18:01:2008, 18:32 -->
<span class="vbquote">(Omh @ 18:01:2008, 18:32 )</span><!--QuoteEBegin-->Насколько оправданны глобальные переменные вообще и на уровне формы в частности.
[snapback]94126" rel="nofollow" target="_blank[/snapback]​
[/quote]
ИМХО, в топку...
Во-первых, создавать себе лишние проблемы при работе с LS-библиотеками (особенно писанными не Вами)
Во-вторых, ИМХО, лишний разброс кода, спустя некоторое время, разбираться даже в своем же коде будет тяжко,а в чужом - так вообще смерть...
 
Y

Yakov

Гость
#5
Согласен с Azrael. Глобальные переменные очень сильно усложняют жизнь при сопровождении.
Создание экземпляров NotesSession и NotesUIWorkspace не стоит ничего (менее 1/100000 секунды на средней машине), все переменные ссылаются на один объект:
Код:
Dim session1 As New NotesSession()
Dim session2 As New NotesSession()
Print session1 Is session2 'True
Я считаю, что если вдруг возникла необходимость использовать глобальную переменную, значит в проекте что-то неправильно. Пользуйтесь параметрами. Если их много - создавайте классы.
Казалось бы, можно использовать глобальную Public-переменную для Singleton'а, но гораздо удобней использовать Property Get или функцию, которая, к тому же, позволит использовать "ленивое" создание объекта:
Код:
Private singleton As SuperPuperClass
Public Function getInstance()
If singleton Is Nothing Then Set singleton = New SuperPuperClass()
Set getInstance = singleton
End Function
<!--QuoteBegin-Omh+18:01:2008, 19:30 -->
<span class="vbquote">(Omh @ 18:01:2008, 19:30 )</span><!--QuoteEBegin-->Правда, сейчас мне кажеться, что это невозможно.
[snapback]94143" rel="nofollow" target="_blank[/snapback]​
[/quote]
Еще как возможно! Не раз встречал такое в СЭД не-скажу-название. Работает. :)
 

Kee_Keekkenen

Well-Known Member
05.09.2006
639
6
#6
никогда и никаких проблем с глобальными переменными не имел.. всякая глобальная переменная локальна в своей области применения.. разумеется нужно писать код аналогичный в приведенном выше посте, с этим я полностью согласен, структурность и логичность -- большая читабельность и понятность..
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
#7
Просто тут небольшой разгорелся небольшой спор на полезность применеия глобальных переменных.
Я - сугубо против.
Единственный случай, где, кмк, не обойтись без глобальных переменных это в процедуре, вызываемой конструкцией вида
Код:
On Event PostDOMParse from DOMPArser Call SuperProcedure
Вот в эту самую SuperProcedure нельзя передать параметер.

А насчёт того, что читабельность чужого кода сильно понижаеться - это точно.

Кстати ни разу не встречался с необходимость передавать объекты типа NotesSession или NotesUIWorkspace через параметры: нафига? ведь всегда можно задекларить новый...
 
S

Sandr

Гость
#8
Иногда использую глобальные переменные, но это очень редко.. по ситуации...
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
#9
Обалдеть, теме уже 2 года почти. :D

За последнее время много нового и умного народа пришло в форум.
Может у кого-нибудь есть мнение по теме?
Хотелось бы выслушать бест практисис из вашего опыта.
Спасибо!

P.S. Эх, это тема была навеяна в своё время тем, что сменил работу и на новой работе использование глобальных переменных было возведено в ранг обязательных условий. Я был ошарашен.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#10
чем больше область видимости переменной тем хужее!
в LS иногда без глобальной переменной не обойтись, вот только тогда их и юзать.
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 223
24
#13
товарищи а подскажите мне одну такую штуку
а как обьявить самую глобальную переменную в лотусе? :D
Пример
заходит юзер в базу а у него тут тыц и спрашивается пин код на его карточку доступа
и чтобы не переспрашивать его по 20 раз пока он там виды щелкает, формы открывает, хотелось бы засунуть в глобальную переменную
попрошу не путать с профилями, инишками :)
 

morpheus

скриптописец
07.08.2006
3 915
1
#14
ToxaRat
гдета была тема про обьекты глобальные ....

или тут или на нотес.ру


не могу найти ссылку
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 483
360
#17
Omh
про UI объекты - яб даже не спрашивал ;)
малевич будет неуловимым - мастера индусского кодирования не позволят пройти мимо :D
кол-во сессий яб берёг тока на случай DIIOP - они там типа грузят сервак
да врядли они нужны перманентные: таймауты, обрывы связи - полюбасу им конец
в сухом остатке, из перечисленного: doc, db
но этож бэкенд и смысл их глобализации, для меня, сомнителен...

др. словами - область применения глобальных LDN объектов в распределённой, многозадачной, многопоточной среде - спорна

есть языки программирования, где это - вовсе абсурд (глобальная переменная, порой и переменные - не переменные ;) ) - процедурные...
одним из кот. является erlang, кот. в с вою очередь используется в CouchDB...

кто не знает старину Каца ;) ?!
продолжателя реализации/имплементации Нотуса, под крылом апача:
http://couchdb.apache.org/
и никаких индусских UI :)
 

VladSh

начинающий
Lotus team
11.12.2009
1 248
2
#18
Глобальные переменные используются. Вопрос в умении их использовать.
Здесь в тексте и комментах это обсуждали.
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
#19
VladSh
О, я это читал ещё когда пешком под стол ходил.
Не знал, что это ты.
Проникся :)
 

VladSh

начинающий
Lotus team
11.12.2009
1 248
2
#20
О, я это читал ещё когда пешком под стол ходил.
Да ладно тебе))) Тут все прикольные челы! Я столько нового узнал... Очень много толковых людей! Хоть дизайн и мрачноватый, но классная конфа, гораздо лучше, чем теперь Интертраст. Радует, что есть ещё место, где все могут вот так собраться... заходишь на форум и каждый раз что-то интересное для себя выносишь. :)