FelixBanan 8 Опубликовано: 22 ноября, 2017 (изменено) Услышал от qwertyMan'а что глобальные переменные зло и решил заменить все глобальные в приложении на локальные и перестало работать. Может я очень тупой и что то не правильно сделал но не работает. Изменено 22 ноября, 2017 пользователем Alex много грязи и мата Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 154 Опубликовано: 22 ноября, 2017 Услышал от qwertyMan'а что глобальные переменные зло и решил заменить все глобальные в приложении на локальные и перестало работать.Глобальные переменные не совсем зло. Они всё-таки необходимы для некоторых целей. Память занимают любые переменные, но локальные работают быстрее. Правда, есть нюансы, о которых где-то рассказывал @ECS: если часто вызывать функцию, внутри которой определена локальная переменная, то вместо ускорения можно получить замедление. Выход из ситуации заключен в создании локальных переменных на уровнях выше часто вызываемых функций. К слову, затраты на доступ к глобальной переменной эквивалентны затратам на доступ к полю локальной таблицы. Главная же особенность глобальных переменных заключена в том, что они доступны любым программам, запущенным в данном окружении. С одной стороны, это ведёт к замусориванию глобального окружения и созданию помех одними запускаемыми программами другим программам, а с другой, глобальне переменные при грамотном использовании дают программам механизм обмена данными через глобальное окружение. И если не стоит именно такая задача, то глобальные переменные создают больше проблем, чем решают их. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Deadlyy 1 Опубликовано: 22 ноября, 2017 Ну смотри. Глобальные переменные действуют НА ВСЮ программу... а локальные - на цикл и т.п. Возможно что у тебя ниже кто-то просится к локальной переменной которую не может получить. *Возможно я ничего не знаю про переменные в Lua. Поправьте кто нибудь. * Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
FelixBanan Автор вопроса 8 Опубликовано: 22 ноября, 2017 Ну смотри. Глобальные переменные действуют НА ВСЮ программу... а локальные - на цикл и т.п.Возможно что у тебя ниже кто-то просится к локальной переменной которую не может получить. *Возможно я ничего не знаю про переменные в Lua. Поправьте кто нибудь. * как я знаю глобальные записываются в оперативную память, а локальные работают только по программе. А тут это не работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Deadlyy 1 Опубликовано: 22 ноября, 2017 как я знаю глобальные записываются в оперативную память, а локальные работают только по программе. А тут это не работает. Окей. Мне всегда хватало ОЗУ. Я не думаю что глобальные переменные будут жрать сотни кб памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ivan52945 75 Опубликовано: 22 ноября, 2017 (изменено) как я знаю глобальные записываются в оперативную память, а локальные работают только по программе. А тут это не работает. возможно будут не совсем корректен, но я постараюсь глобальные переменные видны на всей программе, а локальные только в той конструкции, в которой объявлены и тем, которые происходят внутри конструкции, в которой объявлена переменная(цикл, условие, функция и т.п.) область видимости обзывается вроде https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D1%8C_%D0%B2%D0%B8%D0%B4%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8 локальные пошустрее будут Изменено 22 ноября, 2017 пользователем ivan52945 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
FelixBanan Автор вопроса 8 Опубликовано: 23 ноября, 2017 Глобальные переменные не совсем зло. Они всё-таки необходимы для некоторых целей. Память занимают любые переменные, но локальные работают быстрее. Правда, есть нюансы, о которых где-то рассказывал @ECS: если часто вызывать функцию, внутри которой определена локальная переменная, то вместо ускорения можно получить замедление. Выход из ситуации заключен в создании локальных переменных на уровнях выше часто вызываемых функций. К слову, затраты на доступ к глобальной переменной эквивалентны затратам на доступ к полю локальной таблицы.Главная же особенность глобальных переменных заключена в том, что они доступны любым программам, запущенным в данном окружении. С одной стороны, это ведёт к замусориванию глобального окружения и созданию помех одними запускаемыми программами другим программам, а с другой, глобальне переменные при грамотном использовании дают программам механизм обмена данными через глобальное окружение. И если не стоит именно такая задача, то глобальные переменные создают больше проблем, чем решают их. разжевано просто полностью =) спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 542 Опубликовано: 23 ноября, 2017 (изменено) Глобальные переменные не совсем зло. После ковырянии в сишной луа(пишу эмулятор), на самом деле практически для каждой операции, создание чего либо - вызывается аллокатор и реалоцирует размер выделенной области. Тобишь, хочешь увеличить таблицу, вызывается аллокатор, а в нем уже расширения выделенной области, а это затратно, если в конце не хватает свободного места - то участок полностью копируется и переносится в область требуемой размером. Если интересно, могу позже выложить лог с тем как требует память луа при загрузке базовой библиотеке. Изменено 23 ноября, 2017 пользователем NEO 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Услышал от qwertyMan'а что глобальные переменные зло и решил заменить все глобальные в приложении на локальные и перестало работать. Может я очень тупой и что то не правильно сделал но не работает.
Изменено пользователем Alexмного грязи и мата
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах