Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.25;
Скачать: CL | DM;

Вниз

глобальные переменные   Найти похожие ветки 

 
Сергей С.   (2004-02-11 15:48) [0]

Доброго дня всем!
Помогите новичку разобраться !!!
Имеем пррограмму с несколькими формами (юнитами)
Как правильно определить переменные, чтобы они действовали во всех юнитах??
Заранее спасибо откликнувшимся


 
Johnmen ©   (2004-02-11 15:51) [1]

см. хелп/доку/книги interface, implementation


 
VLAD-MAL   (2004-02-11 15:52) [2]

В одной форме/дата модуле/юните/ объявляем, что хотим, в других модулях указываем этот модуль в Uses.


 
olookin ©   (2004-02-11 15:53) [3]

Определить до implementation. В модуле, в котором ссылаетесь в секции implementation на переменные из другого модуля, написать в uses имя того модуля...


 
Oyster ©   (2004-02-11 15:54) [4]

А чтобы все было доступно во всем, объявляем в implementation в каждом юните ссылки на все остальные.


 
Плохиш   (2004-02-11 16:05) [5]

>Сергей С. (11.02.04 15:48)

1. Сделать отдельный модуль подключить его к остальным
2.1 Пересмотреть алгоритм с целью отказа от глобальных переменных
2.2 Изучить основы ООП и использовать property


 
VLAD-MAL   (2004-02-11 16:08) [6]

Удалено модератором
Примечание: Оффтоп...


 
Плохиш   (2004-02-11 16:11) [7]

Удалено модератором
Примечание: Оффтоп...


 
Oyster ©   (2004-02-11 16:20) [8]

Удалено модератором
Примечание: Оффтоп...


 
Плохиш   (2004-02-11 16:24) [9]

Удалено модератором
Примечание: Оффтоп...


 
alex_*** ©   (2004-02-11 16:26) [10]

глобальные переменные - отстой. Чем раньшне их выбросить из проекта, тем лучше. ИМХО - использовать можно, в принципе, но только при крайней необходимости.


 
Сергей С.   (2004-02-11 16:34) [11]

Помогло только создание отдельного модуля.
Остальное почемуто не захотело работать. :-((
А почему не нужно использовать глобальные переменные и как передвать данные между формами ???


 
Oyster ©   (2004-02-11 16:41) [12]


> А почему не нужно использовать глобальные переменные и как
> передвать данные между формами ???

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


 
Сергей С.   (2004-02-11 16:56) [13]

Я может не так выразился - это значит что значения переменных присвоенных в одной форме должны отображаться и использоваться в другой


 
Oyster ©   (2004-02-11 17:00) [14]

Как в форме могут присваиваться переменные? Если имелось в виду в модуле - после присвоения вызываем процедуру из другого модуля, которая все отобразит и использует.


 
Сергей С.   (2004-02-11 17:07) [15]

конечно в модуле
привычка фокспрошника


 
Алхимик ©   (2004-02-11 23:25) [16]


> alex_*** © (11.02.04 16:26) [10]
> глобальные переменные - отстой.

Это что, новое слово в программировании? Обоснуйте.


 
alex_*** ©   (2004-02-13 15:09) [17]


> alex_*** © (11.02.04 16:26) [10]
> глобальные переменные - отстой.

Это что, новое слово в программировании? Обоснуйте.

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

А что тут обосновывать? Разве использование глобальных переменных не плохой стиль программирования? Я как-то разбирался в одной старой проге под ДОС, так там даже рабочие переменные были внешними. Замучился отслеживать кто что где изменяет. Проклинал разработчика полночи.


[12]
А я считаю, что глобальные переменные использовать можно, лишь бы все работало.


ага... продолжая идею лишь бы работало можно и до Copy/Paste дойти. Потом получается ряд одинаковых по коду обработчиков для разных контролов. И вообще меня просто коробит когда программист такое говорит. На собеседовании я бы с ним даже разговаривать дальше не стал.


 
Oyster ©   (2004-02-13 15:14) [18]


> там даже рабочие переменные были внешними

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


 
Anatoly Podgoretsky ©   (2004-02-13 15:15) [19]

Свойство в класс


 
alex_*** ©   (2004-02-13 15:16) [20]

а к чему они прилагаются? не просто же валяются? сделать проперти на форме или на ДМ и писать туда.


 
Семен Сорокин ©   (2004-02-13 15:23) [21]

alex_*** © (11.02.04 16:26) [10]
глобальные переменные - отстой.

А что Вы скажете по поводу таких переменных как Application, Screen, Printer, Mouse.. etc.


 
alex_*** ©   (2004-02-13 15:53) [22]

провокационный вопрос ))
Ну что сказать... если они вписываются в схему и являются логически независимыми...
Прежде всего с головой надо использовать. Уж коли формы оформлены в виде классов, то и взимодействовать друг с другом должны через интерфейсную часть объектов, а не через не привязанные ни к чему переменные.
Один мужик переменные для формы хранил в интерфейсной части модуля. Когда ему указали на плохое проектирование, он часть сделал таки через методы, а рабочие перенес в implementation. В итоге когда форма создается один раз - все ОК. А при следующем создании переменные содержали состояние предыдущего экземпляра формы и клиенты ловили глюков.

p.s. я так даже сразу и не вспомню когда приходилось использовать внешние переменные, ИМХО. Может у кого другой опыт их использования.


 
Sandman26   (2004-02-13 16:24) [23]

[21] Семен Сорокин © (13.02.04 15:23)

Printer - это функция, создающий объект TPrinter при первом обращении.
При последующих обращениях она просто возвращает указатель на уже созданный объект.
Глобальная переменная - это в некотором роде аналог поля в объекте. Если есть шанс, что структура данных в глобальной переменной изменится, лучше призвать на помощь аналог инкапсуляции и сделать аналог property на модульном уровне. Что-то типа SetMyVar/GetMyVar.


 
Семен Сорокин ©   (2004-02-13 16:28) [24]

Sandman26 (13.02.04 16:24) [23]
я это отлично понимаю :)
насчет Printer - согласен, ошибся. Просто некоторые так категорично выступают против глобальных переменных, хотя сами того не замечяя их используют.


 
Sandman25+1(forgot password)   (2004-02-13 16:41) [25]

[24] Семен Сорокин © (13.02.04 16:28)

Не сомневался, что Вы понимаете :)
Но ИМХО глобальные переменные нужно использовать крайне редко, в основном, именно как уникальные по своей природе объекты типа Screen или Application.
Пример: я для ускорения и упрощения вызовов в нескольких BPL использовал модуль, в котором объявлен Connection: TSQLConnection. Теперь уже можно было не передавать его, а просто присвоить один раз после присоединения и использовать, где угодно. А потом выяснилось, что одному из наших разработчиков в одном из режимов понадобилось сразу 2 соединения. Ему пришлось постоянно следить за тем, что присвоено в эту самую Connection и переключать, когда надо.


 
Anatoly Podgoretsky ©   (2004-02-13 16:58) [26]

Семен Сорокин © (13.02.04 15:23) [21]
Все что ты назвал это объекты, врядли ты будешь их подменять своими, а если и будешь то тоже объектами.
К глобальным объектам претензий нет, разве что чуть чуть.


 
Семен Сорокин ©   (2004-02-13 17:09) [27]

Anatoly Podgoretsky © (13.02.04 16:58) [26]
Все что ты назвал это объекты, врядли ты будешь их подменять своими, а если и будешь то тоже объектами.
К глобальным объектам претензий нет, разве что чуть чуть.

согласен, но разве глобальный объект нельзя назвать глобальной переменной :)
к тому же есть много "не-объектов" переменных, например из SysUtils:
var
CurrencyString: string;
CurrencyFormat: Byte;
NegCurrFormat: Byte;
ThousandSeparator: Char;
...
:))


 
Плохиш   (2004-02-13 17:22) [28]


> Семен Сорокин © (13.02.04 17:09) [27]

SysUtils так и называется "System Utilities Unit"

А использовать глобальные переменные в модуля с формами и т.д., тут я полностью согласен с [10]



Страницы: 1 вся ветка

Текущий архив: 2004.02.25;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.02 c
3-79592
nataliK
2004-02-02 16:14
2004.02.25
Query результат запроса выдает ##


7-80333
webpauk
2003-11-28 18:23
2004.02.25
Загрузка с Windows


1-79890
ruslan_as
2004-02-10 11:03
2004.02.25
Как DateEdit заставить открывать нужный мне месяц


1-79806
ИМХО
2004-02-13 22:05
2004.02.25
По поводу DateSeparator и ShortDateFormat


8-80048
kopcap
2003-09-21 18:01
2004.02.25
Помогите с OpenGL , неработает команда glTranslate()