Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
Внизглобальные переменные Найти похожие ветки
← →
Сергей С. (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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.037 c