Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глобальные переменные, опасны? Нужны? 
V
    Опции темы
Rickert
Дата 15.3.2008, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



Где-то слышал, что нужно избегать глобальных переменных вообще.
Правда ли и почему?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Alek86
Дата 15.3.2008, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Избегать нужно глобальных неконстантных переменных, ибо их изменение сложно отследить

Число Пи лучше сделать глобальной константой...


--------------------
user posted image    user posted image
PM MAIL   Вверх
archimed7592
Дата 15.3.2008, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Rickert @  15.3.2008,  10:57 Найти цитируемый пост)
Правда ли и почему? 


Rickert, ну а ты попробуй придумать сценарий, при котором глобальные переменные будут хорошим решением ;).


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Rickert
Дата 15.3.2008, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



archimed7592, разработка игр. Глобальные переменные: системные установки, игровой мир, профиль игрока. Теже системные установки необходимы для инициализации окна и обработки событий.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
vinter
Дата 15.3.2008, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(Rickert @  15.3.2008,  12:51 Найти цитируемый пост)
archimed7592, разработка игр. Глобальные переменные: системные установки, игровой мир, профиль игрока. Теже системные установки необходимы для инициализации окна и обработки событий.

так зачем им быть глобальными? можно сделать классы которые будут отвечать за конкретную часть интерфейса инициализации. Можно их сделать статическими внутри классов.


--------------------
Мой блог
PM MAIL WWW   Вверх
Rickert
Дата 15.3.2008, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



Корчое ясно. Всем спасибо!


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Alek86
Дата 15.3.2008, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(archimed7592 @  15.3.2008,  11:35 Найти цитируемый пост)
Rickert, ну а ты попробуй придумать сценарий, при котором глобальные переменные будут хорошим решением

уточню - ты о ЛЮБЫХ глобальных переменных?
имхо, я предложил 1 из сценариев, когда глобальная переменная - самое лучшее решение. ну можно еще в неймспейс Math какой-нить обернуть...


--------------------
user posted image    user posted image
PM MAIL   Вверх
MAKCim
Дата 15.3.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(Rickert @  15.3.2008,  10:57 Найти цитируемый пост)
Где-то слышал, что нужно избегать глобальных переменных вообще.
Правда ли и почему? 

неправда
точнее нельзя тупо и односторонне следовать какому-то "правилу", если оно не является законом
надо руководствоваться здравым смыслом
где-то глобальные переменные применять не следует, а где-то они будут очень даже кстати




--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Dmi3ev
Дата 15.3.2008, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 1
Всего: 41



если можешь, обходись без них.
если не можешь, КОНЕЧНО СТОИТ ИСПОЛЬЗОВАТЬ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ.
ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ НЕ ЯВЛЯЮТСЯ ПЛОХИМИ. ПРОСТО НАДО БЫТЬ ОСТОРОЖНЫМ.
1
ЕСЛИ ДОПУСТИМ У ТЕБЯ ЕСТЬ ГЛОБАЛЬНАЯ ПЕРЕМЕННАЯ А И В ФУНКЦИИ ЛОКАЛЬНАЯ ПЕРЕМЕННАЯ А, ТО ДЕЙСТВИЕ ГЛОБАЛЬНОЙ ПЕРЕМЕННОЙ ПЕРЕКРОЕТСЯ ЛОКАЛЬНОЙ ПЕРЕМЕННОЙ (В ЭТОЙ ФУНКЦИИ)
2
СЛОЖНО ОТСЛЕЖИВАТЬ ИЗМЕНЕНИЕ ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ

ОДНАКО ЕСЛИ ЕСТЬ МНОГО ПЕРЕМЕННЫХ, КОТОРЫЕ НАДО ПЕРЕДАВАТЬ ИЗ ФУНКЦИИ В ФУНКЦИЮ, ТО Я, НАПРИМЕР, ИСПОЛЬЗУЮ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ.


--------------------

PM MAIL   Вверх
MAKCim
Дата 15.3.2008, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Dmi3ev

M
MAKCim
Используйте заглавные буквы по назначению!



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
archimed7592
Дата 16.3.2008, 02:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Alek86 @  15.3.2008,  12:56 Найти цитируемый пост)
уточню - ты о ЛЮБЫХ глобальных переменных?
имхо, я предложил 1 из сценариев, когда глобальная переменная - самое лучшее решение. ну можно еще в неймспейс Math какой-нить обернуть... 

Угу, о любых. Любой объект помимо своего глобального использования ещё имеет этапы инициализации и финализации, которые необходимо контролировать(как моменты свершения этих этапов, так и процесс их протекания). Без этого контроля глобальная переменная такая же полезная вещь, как, к примеру, неинициализированная локальная переменная. Сразу оговорюсь, что константа - это не переменная smile.


Цитата(Rickert @  15.3.2008,  11:51 Найти цитируемый пост)
archimed7592, разработка игр. Глобальные переменные: системные установки, игровой мир, профиль игрока.

Возможно, что многих моё мнение шокирует, но, всё же я его выскажу(постараюсь наиболее деликатно).
Производство ПО - это целая отрасль в промышленности со своей спецификой, требованиями, ньюансами, etc.
В этой самой отрасли есть много разных областей, где правят свои законы. Дык вот, самые большие области - это enterprise & small business: в этих областях секрет успешных проектов заключается в искусстве наиболее эффективно производить легко поддерживаемое ПО, т.е. задачи всего три: 1) потратить наименьшее кол-во ресурсов(время+деньги); 2) уметь подстраивать проект также быстро, как меняются требования заказчика; 3) итоговый проект должен поддаваться поддержке минимальными силами(те же время и деньги).
Также есть др. маленькие области, но я упомяну лишь одну, а именно компьютерные игры: в этой области секрет успешных проектов заключается в искусстве максимально быстро производить полотна неподдерживаемого кода у которого всего две задачи: 1) работать; 2) жрать минимум компьютерных ресурсов. Точнее говоря, это не обязательно должны быть полотна и не обязательно неподдерживаемый код, но ввиду жесткой конкуренции получаются именно полотна и именно неподдерживаемого кода smile.
Большинство правил хорошего тона в программировании(аля "global variables is evil") просто напросто не нужны разработчикам КИ. Я не пытаюсь обидеть разработчиков игр - это просто констатация факта, которому, кстати есть простое объяснение smile. Дело в том, что, если взять, к примеру, сложную ERP/CRM. Вот заказывает крупный клиент такую систему, получает её за круглую сумму, после чего переодически выкладывает круглые суммы за развитие этой системы(параллельно с развитием его бизнеса и, соответственно, требований) и вполне можно понять, что он хочет выложить 100 у.е. и потерять 1 месяц единожды(за разработку), после чего доплачивать по 10 у.е. за поддержку(доработку) и терять около 2-3 дней, чем заплатить 50 у.е. единожды и получить результат за 2 недели, но впоследствии не иметь возможностей доработки системы... точнее говоря он имеет таковую возможность, но только в виде "заплати нам ещё раз 50 у.е. и подожди ещё 2 недели - мы добавим нужную тебе кнопку". И сравните это с КИ: вышла игрушка, побегали, пострелялись, забыли и главное, чтобы она окупилась, она должна быть интересной, красивой, и работать на большинстве компьютеров. В итоге получается, что разработчику КИ порой проще воспользоваться глобальной переменной, чем сингтоном или чем вообще максимально локализовать это состояние.



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
korian
Дата 16.3.2008, 03:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 3
Всего: 17



archimed7592
соглашусь тока для маленьких игр, причем для компаний однодневок  smile 
во-первых потому, шо если компания постоянно занимается КИ, то повторно используемый код им необходим.
а во-вторых, потому шо такое детище как WOW, написать и шоб оно работало (а они его еще и поддерживают, дорабатывают)... без соблюдений правил имху не реально
плюс как многие пишут, правильно написанную прогу сделать более быстрой - обычно легко
а сделать более быструю прогу правильной - обычно трудно


Это сообщение отредактировал(а) korian - 16.3.2008, 03:27
PM   Вверх
Rickert
Дата 16.3.2008, 06:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



Цитата(archimed7592 @  16.3.2008,  02:46 Найти цитируемый пост)
Также есть др. маленькие области, но я упомяну лишь одну, а именно компьютерные игры: в этой области секрет успешных проектов заключается в искусстве максимально быстро производить полотна неподдерживаемого кода у которого всего две задачи: 1) работать; 2) жрать минимум компьютерных ресурсов. Точнее говоря, это не обязательно должны быть полотна и не обязательно неподдерживаемый код, но ввиду жесткой конкуренции получаются именно полотна и именно неподдерживаемого кода 

Нет, ты ошибаешься, поверь мне. Сейчас компании ведут политику направленную на разработку движков максимально-расширяемых. То бишь движки наращивают мышцы до такой степени, что на их основе можно было делать новые игры. Разработчики КИ живут ныне продажей движков больше, чем самими играми. Сравнить, 3 года назад движок ку3 стоил 500k$, сейчас движок doom3 стоит порядка 2kk$


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
vinter
Дата 16.3.2008, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



archimed7592, голословное утверждение, которые ты не сможешь ничем подтвердить, и я уверен что ты не прав smile 
Если бы все писали "лишь бы работало", то ни о каких аддонах изменяющих функционал и речи бы быть не могло.


--------------------
Мой блог
PM MAIL WWW   Вверх
archimed7592
Дата 16.3.2008, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



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

Цитата(Rickert @  16.3.2008,  06:21 Найти цитируемый пост)
2kk$

Уй ты госпади, а 2 кк - это что, предел мечтаний? Ну сколько у них будет продаж движка? И сколько они поимеют с продажи самого дума?



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0891 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.