• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы Omh
  • Дата начала
O

Omh

Уважаемые программисты!

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

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

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

fedotxxl

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

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

Omh

Вот ещё был такой случай (не понимаю сейчас был ли это глюк или всё-таки понастоящему).
LS'ный Shared Action юзал переменную doc, которая была задекларена на форме, куда он был помещён.
Т.е. на рантайме он подхватывал этот объект и начинал с ним работать.

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

Azrael

<!--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

Согласен с 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]
Еще как возможно! Не раз встречал такое в СЭД не-скажу-название. Работает. :)
 
K

Kee_Keekkenen

никогда и никаких проблем с глобальными переменными не имел.. всякая глобальная переменная локальна в своей области применения.. разумеется нужно писать код аналогичный в приведенном выше посте, с этим я полностью согласен, структурность и логичность -- большая читабельность и понятность..
 
O

Omh

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

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

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

Sandr

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

Omh

Обалдеть, теме уже 2 года почти. :D

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

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

Akupaka

чем больше область видимости переменной тем хужее!
в LS иногда без глобальной переменной не обойтись, вот только тогда их и юзать.
 
T

turumbay

ненорматив внутри, поэтому ссылкой:
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
товарищи а подскажите мне одну такую штуку
а как обьявить самую глобальную переменную в лотусе? :D
Пример
заходит юзер в базу а у него тут тыц и спрашивается пин код на его карточку доступа
и чтобы не переспрашивать его по 20 раз пока он там виды щелкает, формы открывает, хотелось бы засунуть в глобальную переменную
попрошу не путать с профилями, инишками :)
 
M

morpheus

ToxaRat
гдета была тема про обьекты глобальные ....

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


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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
Omh
про UI объекты - яб даже не спрашивал ;)
малевич будет неуловимым - мастера индусского кодирования не позволят пройти мимо :D
кол-во сессий яб берёг тока на случай DIIOP - они там типа грузят сервак
да врядли они нужны перманентные: таймауты, обрывы связи - полюбасу им конец
в сухом остатке, из перечисленного: doc, db
но этож бэкенд и смысл их глобализации, для меня, сомнителен...

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

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

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

и никаких индусских UI :)
 

VladSh

начинающий
Lotus Team
11.12.2009
1 783
157
BIT
55
Глобальные переменные используются. Вопрос в умении их использовать.
в тексте и комментах это обсуждали.
 
O

Omh

VladSh
О, я это читал ещё когда пешком под стол ходил.
Не знал, что это ты.
Проникся :)
 

VladSh

начинающий
Lotus Team
11.12.2009
1 783
157
BIT
55
О, я это читал ещё когда пешком под стол ходил.
Да ладно тебе))) Тут все прикольные челы! Я столько нового узнал... Очень много толковых людей! Хоть дизайн и мрачноватый, но классная конфа, гораздо лучше, чем теперь Интертраст. Радует, что есть ещё место, где все могут вот так собраться... заходишь на форум и каждый раз что-то интересное для себя выносишь. :)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!