| Использовать ли global.* |
|
SRes
| Дата: Понедельник, 20.04.2009, 11:21 | Сообщение # 21 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2512
Статус: Offline
|
А ничем не отличается, по тестам Ниньзи, как видишь, глобалы даже быстрее. Тем более объявить сразу глобалкой и не мучатся лишний раз писаниной global. удобно.
Velociped Inc.
|
| |
| | |
|
WertyXBOCT
| Дата: Понедельник, 20.04.2009, 11:30 | Сообщение # 22 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
|
Если есть инструмент, то лучше его использовать!
Blog:www.WeslomPo.ru mailto: i@weslompo.ru
|
| |
| | |
|
WfalconW
| Дата: Понедельник, 20.04.2009, 12:46 | Сообщение # 23 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 1686
Статус: Offline
|
Глобал, кстати, при тесте в списке переменнх сразу виден, а что бы увидеть переменные контроллера надо его id ещё вводить))))
wfalconw.asuscomm.com - мой сервер мейнкрафта. Работает не 24/7 Жертва родины, блог разработки: http://wfalconw.livejournal.com/
|
| |
| | |
|
OPALsmoke
| Дата: Понедельник, 20.04.2009, 15:19 | Сообщение # 24 |
Хрен заткнешь
Группа: Проверенные
Сообщений: 347
Статус: Offline
|
WertyXBOCT +1 Если того требует случай то конечно использовать! Но если вы обходитесь без globa.hp и используете тот же o_player.hp конца света не случиться! Кому как удобней..
gmexe.ru
|
| |
| | |
|
splean
| Дата: Понедельник, 20.04.2009, 15:31 | Сообщение # 25 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 1473
Статус: Offline
|
я тему то и создал чтобы выяснить не кому как удобно, а как в ГМ-е будет целесообразней. Ждем Ang3L-а с аргументами)
Блог? Твиттер! =)
|
| |
| | |
|
DreamRunner
| Дата: Понедельник, 20.04.2009, 16:07 | Сообщение # 26 |
Админ
Группа: Админы
Сообщений: 1382
Статус: Offline
|
последнее время использовал запись вида g.variable, global юзать перестал, т.к. слишком длинно:) А объект g может выполнять заодно и роль супервизора. Я не проверял на скорость, насколько я помню, но побочных эффектов не заметил. Поэтому пока я за g.var
|
| |
| | |
|
CH@$ER
| Дата: Понедельник, 20.04.2009, 17:46 | Сообщение # 27 |
Всех уже задолбал
Группа: Высший Советник
Сообщений: 1088
Статус: Offline
|
Ой мой бог!!! Это кого учили не использовать глобалы?! В любом случае они будут. А сокрытие таких переменных в каком-нибудь одном "главном" классе (если говорить о старших языках программирования) сути глобальности не меняет - переменные становятся группированными и все. А вот насчет globalvar: если и использовать, то с какой-нибудь приставкой, например gQualityLevel, иначе можно очень быстро запутаться. А смысл хранить переменные в объекте один - краткость записи. Правда потом в этой краткости можно будет легко запутаться.
Создание 3D FPS · Онлайновые таблицы рекордов · Многое другое!
Сообщение отредактировал CH@$ER - Понедельник, 20.04.2009, 17:48 |
| |
| | |
|
Ang3L
| Дата: Понедельник, 20.04.2009, 23:34 | Сообщение # 28 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
|
Первый вопрос который задают многие новички: "Как сделать так чтобы жизни убавлялись только у одного юнита?". Ответ прост, не использовать глобал и проблема решится. Конечно, если юнит будет один в своём роде, то глобал, не глобал - пофиг. Далее, для жизней есть встроенная переменная health. Кто её использует? К сожалению, я не нарыл инфы в нэте. Только типа, модеры объясняют новичкам, что им не следует использовать глобальные переменные. Но точных За и Против от профи я не нашёл. Кто найдёт, инфу в студию, пожалуйста. Ещё один пример. Был объект, в нём счётчик for(i = 0; i < чего-то; i += 1), а внутри счётчика скрипт. В скрипте тоже счётчик for(i = 0; i < чего-то; i += 1). И это всё глючило. Я не понимал почему. Вставил show_message() и выяснил что i прыгает туда сюда, и я не могу понять почему! Потом разобрался: оказывается i используется общая для всего объекта и переменные без var в скрипте будут принадлежать этому объекту из котрого вызвали скрипт, а не только скрипту. Меня это удивило. Теперь я всегда чётко разграничиваю область видимости, чтобы таких казусов не было. Как нуп, заявляю: Я не использую глобалы. А дальше каждый решит сам, использовать или нет. У меня всё.
Blogpost
|
| |
| | |
|
WfalconW
| Дата: Вторник, 21.04.2009, 00:45 | Сообщение # 29 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 1686
Статус: Offline
|
Ang3L, А нафига использовать переменные вида "i" ? Мне как-то удобнее свои придумывать. Возможно длинна переменной влияет на количество ячеек в памяти, но так гораздо легче. Я не за то, точ бы использовать везде глобалы и не за то, что бы вообще не использовать глобал. Они нужны в каких-то ситуациях и будут работать гораздо лучше. Например в игре с 100 комнатами нужна одна переменная, которая хранит жизни игрока. Использовать один глобал, который будет назначаться в самом начале - это по мне проще. И везде я буду знать, что переменная global.player_lives - это жизни игрока и легко написать переменную в тех местах, где нужно. Вообщем тема со спором ни о чём))))) думаю всё уже выснилось, то ещё драка начнёться))))))
wfalconw.asuscomm.com - мой сервер мейнкрафта. Работает не 24/7 Жертва родины, блог разработки: http://wfalconw.livejournal.com/
|
| |
| | |
|
Ang3L
| Дата: Вторник, 21.04.2009, 01:12 | Сообщение # 30 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
|
Quote (WfalconW) А нафига использовать переменные вида "i" ? Буквенные переменные обычно используются в счётчиках(где я их и использовал), чтобы не нести смысловую нагрузку и одновременно быть короткими.
Blogpost
|
| |
| | |
|
splean
| Дата: Вторник, 21.04.2009, 09:16 | Сообщение # 31 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 1473
Статус: Offline
|
Вердикт: программистов, использующих глобал, наказывать НЕ нужно.
Блог? Твиттер! =)
|
| |
| | |
|
Jeners
| Дата: Вторник, 21.04.2009, 12:04 | Сообщение # 32 |
Каждый 5й пост мой
Группа: Проверенные
Сообщений: 1618
Статус: Offline
|
Ang3L, Гы... =) вощето цикл создает перменную и переберает ее до конечного результата если сунуть цикл в цикл то выйдет так что одна и таже переменная перебераеться несколько раз воще вот двойной цикл for (i=0;i<=20;i+=1) for (i=0;i<=20;i+=1) { Бла-бла бла} первый цикл к i добавляет 1 далее запускаеться второй цикл и пока не переберт i до 20 он не останавливаеться.. затем процедура возвращаеться к первому циклу но i то уже ровна 20.. значит цикл обнуляеться =)
Интернет католог строителей
Сообщение отредактировал Jeners - Вторник, 21.04.2009, 12:09 |
| |
| | |
|
CH@$ER
| Дата: Вторник, 21.04.2009, 12:24 | Сообщение # 33 |
Всех уже задолбал
Группа: Высший Советник
Сообщений: 1088
Статус: Offline
|
Нужно четко разграничивать глобальные и локальные переменные. Локальные переменные соответствуют четко одному образцу объекта, а глобальные одинаковы для всех - это настройки игры, какие-нибудь глобальные списки (список объектов на карте) и так далее. Ang3L, а по поводу скрипта и цикла - это по невнимательности. Большинство до сих пор не использует блок var и даже не задумываются о том, что в объекте появляется куча ненужных переменных, которые занимают место в памяти.
Создание 3D FPS · Онлайновые таблицы рекордов · Многое другое!
|
| |
| | |
|
Ang3L
| Дата: Вторник, 21.04.2009, 14:24 | Сообщение # 34 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
|
Quote (Jeners) for (i=0;i<=20;i+=1) for (i=0;i<=20;i+=1) { Бла-бла бла} У тебя счётчики в одном месте. А у меня в разных частях программы свалившиеся в одну. Одна в скрипте, другая в объекте. Но было действительно так. И в одном объекте такое нельзя сделать, а вот если второй счётчик положить в скрипт и ограничить var i; То возможно. Можно даже обмен данными устроить.
Blogpost
|
| |
| | |
|
Druce
| Дата: Вторник, 21.04.2009, 15:09 | Сообщение # 35 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 1543
Статус: Offline
|
Ang3L, так ты все-таки за то, чтобы не использовать global.variable или против объявления переменных globalvar? С глобалваром запутаться конечно очень легко, а против глобала простого-то ты чего всполошился? Если ты 10 раз напишешь global.life_of_that_monster_from_the_left_corner, то уже вряд ли будешь путать ее с чем-то еще. ИМХО, так: глобалвар юзать лучше не надо, в остальных случаях следует только правильно и адекватно называть переменные, чтобы было понятно, к чему они, а во вложенных циклах юзать разные счетчики (я юзаю буквы i, j, k) типа for(i=0;i<100;i+=1) for(j=0;j<100;j+=1) massiv[i,j]=12345
druce.ucoz.ru|andrewsweekly.livejournal.com|А OneStep тем временем мертв.
|
| |
| | |
|
Ang3L
| Дата: Вторник, 21.04.2009, 16:40 | Сообщение # 36 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
|
Quote (Druce) for(i=0;i<100;i+=1) for(j=0;j<100;j+=1) massiv[i,j]=12345 Да у меня не такая ситуация была. Вот представь, ты сделал проход списка. Code for(i=0;i<ds_list_size;i+=1) { //что-то должно быть, но это делаешь не ты, а друг твой. } Он те дал скрипт в котором что-то итеративно считается, полностью 100% рабочий. Ты вставляешь, а он не работает! Как же так??? А главное, почему? А всё потому что он забыл вставить строчку var i; Скрипт вылезает наружу и коцает твой i. Совпадение общих букв очень велико, т.к. пользуются в основном abc, ijk и xyz, намного реже другие буквы. У меня ГМ6. globalvar можно и нужно использовать, но незабывать ставить префикс g(или G, глобалы как правило обозначают крупными буквами), как сказал CH@$ER. Quote (Druce) против глобала простого-то ты чего всполошился? Это я всполошился???  Я верю опытным программистам, они сказали, что это не оч. хорошо и на них словили не одну лягушку. И вам советую им поверить. Вряд ли они это говорят, чтобы мы лишились ценного инструмента. Вот простенькая схемка. Слева глобалы, они распространяются на все образцы, так? Так. На рисунке их 3(как и глобальных переменных), мысленно увеличьте их до, например, 20 (не так много надеюсь?). Все они имеют доступ на изменение. У одного образца все планеты встали в ряд, и он неправильно изменил глобальную переменную. т.к. обмен идёт и с остальными образцами, им передалось неправильное значение(красненькая стрелка с номером 1). Но не такое критичное, чтобы остановить программу(стрелки раздаются дальше. 2). Критичное значение наступает через полминуты(фатальная стрелка 3). А теперь вопрос: В каком образце возникла ошибка? Почему она возникла? Вот с глобалами это узнать намного сложнее. Справа, через объект. Образец даёт неправильное значение супервизору(по DreamRunner'у :D). Он сверяет значение и говорит, что этот образец дал неправильное значение. И далее супервизор не выпускает неправильное значение на остальные, чтобы они не "заразились".
Blogpost
|
| |
| | |
|
splean
| Дата: Вторник, 21.04.2009, 16:56 | Сообщение # 37 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 1473
Статус: Offline
|
ну, а что мешает этому супервизору контроллеру проверять глобальные переменные? и теперь это будут не g.variable, где g - этот объект контроллер, подсвеченный каким то таким цветом а global.variable Добавлено (21.04.2009, 16:56) --------------------------------------------- Что на мой взгляд будет читаться удобнее, т.к. g - не единственный объект, к которому могут обратиться, отчего можно визуально не заметить глобальную переменную в коде.
Блог? Твиттер! =)
|
| |
| | |
|
Druce
| Дата: Вторник, 21.04.2009, 17:11 | Сообщение # 38 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 1543
Статус: Offline
|
Так вся фишка в том, что глобал надо юзать для тех вещей и переменных, кторые действительно едины для всех использующих. И глобалы надо только для таких случаев и использовать, когда изменение глобала должно затрагивать все объекты. А в остальных случаях надо пересылать данные конкретно нужному образцу объекта. А принципиальная разница между g.aaa и global.aaa в том, что глобал сохраняется при смене комнаты. А если поставить объект g постоянным, то разницы по идее быть не должно.
druce.ucoz.ru|andrewsweekly.livejournal.com|А OneStep тем временем мертв.
|
| |
| | |
|
Ang3L
| Дата: Вторник, 21.04.2009, 17:23 | Сообщение # 39 |
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
|
К глобальным переменным имеют доступ все кому не лень. Более беспорядочно. Через объект нужно сделать запрос, выдавая свой ид. Более упорядочено. Quote (splean) а что мешает этому контроллеру проверять глобальные переменные? Смысла уже не будет, потому что они будут не глобальными, а локальными для этого объекта. И они будут защищены от случайного внешнего воздействия. Я не рассматриваю вопрос читабельности. Тем более 95% юзеров, того кода что я видел на ГМЛ, видимо не беспокоятся о читабельности. А у меня всё в поряде. Добавлено (21.04.2009, 17:23) --------------------------------------------- Я думаю что global это объект. Доступ к членам этого объекта осуществляется через точку. Но в отличий от НАШЕГО объекта, мы не можем залезть в global. Quote (Druce) И глобалы надо только для таких случаев и использовать, когда изменение глобала должно затрагивать все объекты. Это функция обновления. Зачем обновлять постоянно, если можно обновлять по запросу?
Blogpost
|
| |
| | |
|
Druce
| Дата: Вторник, 21.04.2009, 17:48 | Сообщение # 40 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 1543
Статус: Offline
|
Ang3L, глобал использовать, когда надо обновить все. Если один конкретный обновить, тогда локал. Я вообще не понимаю, за что холивар? Глобал - он на то и глобал, что нужен для воздействия на всех. И если ты считаешь, что передавать информацию одному объекту через глобал - это изврат, то ты прав)). Но есть некоторые вещи, которые реально делаются через глобал. На чем ты настаиваешь? Не использовать глобал? А почему? Вот напиши список того, что в глобале тебе не нравится. По пунктикам.
druce.ucoz.ru|andrewsweekly.livejournal.com|А OneStep тем временем мертв.
|
| |
| |
|
|