Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-79887
Хомячок
2004-02-09 22:50
2004.02.25
Всем, кто знаком со стринггридом...(СГ)


1-79744
CacoDemon
2004-02-12 10:49
2004.02.25
Можно ли в RichEdit...


1-79868
pASkdua
2004-02-10 14:32
2004.02.25
Вопрос по TMaskEdit...


6-80059
Mouse
2003-12-19 11:10
2004.02.25
Client/Server Socket - в чем именно проблема?


1-80001
Saris
2004-02-09 17:02
2004.02.25
Создание объектов в Rave reports





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский