Глобальные переменные плохо? [закрытый]

Учитывая, что ваша информационная страница PHP не отображает раздел, отображающий конфигурацию MySQL, можно предположить, что MySQL не может быть установлен на вашем сервере.

232
задан GEOCHET 27 January 2009 в 18:36
поделиться

17 ответов

Проблема с глобальными переменными состоит в том, что, так как каждая функция имеет доступ к ним, становится все больше трудно выяснить, какие функции на самом деле чтение и пишет этим переменным.

, Чтобы понять, как приложение работает, в значительной степени необходимо принять во внимание каждую функцию, которая изменяет глобальное состояние. Это может быть сделано, но поскольку приложение растет, это станет более твердым на грани того, чтобы быть фактически невозможным (или по крайней мере полная пустая трата времени).

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

240
ответ дан Brian Rasmussen 4 November 2019 в 13:09
поделиться

Глобальные переменные прекрасны в небольших программах, но ужасные, если используется тот же путь в больших.

Это означает, что можно легко привыкнуть использовать их при изучении. Это - то, от чего Ваш преподаватель пытается защитить Вас.

, Когда Вы более опытны, будет легче изучить, когда они будут хорошо.

4
ответ дан Darron 4 November 2019 в 13:09
поделиться

Нет они не плохи вообще. Необходимо посмотреть (машина) на код, произведенный компилятором для создания этого определения, иногда это далеко намного хуже для использования локального, чем глобальное. Также обратите внимание, что помещение "статичного" на локальной переменной в основном делает это глобальным (и создает другие ужасные проблемы, которые реальное глобальное решило бы). "локальные globals" особенно плохи.

Globals дают Вам чистый контроль над Вашим использованием памяти также, что-то намного более трудное, чтобы сделать с местными жителями. В эти дни тот единственные вопросы во встроенных средах, где память вполне ограничена. Что-то для знания, прежде чем Вы предположите, что встроил, совпадает с другими средами, и предположите, что правила программирования являются тем же через плату.

хорошо, что Вы подвергаете сомнению преподававшие правила, большинство из них не по причинам, которые Вам говорят. Самый важный урок, хотя не то, что это - правило носить с Вами навсегда, но это - правило, требуемое соблюдать, чтобы передать этот класс и продвинуться. В жизни Вы найдете, что для компании XYZ у Вас будут другие правила программирования, что в конце необходимо будет соблюдать, чтобы продолжать получать зарплату. В обеих ситуациях можно обсудить правило, но я думаю, что у Вас будет намного лучшая удача в задании, чем в школе. Вы - просто другой из многих студентов, Ваше место будет скоро заменено, привычка преподавателей, в задании, Вы - одна из малочисленной команды плееров, которые должны видеть этот продукт в конец, и в той среде разработанные правила в пользу членов команды, а также продукта и компании, поэтому если все похожи настроены или если для конкретного продукта существует хорошая техническая причина нарушить что-то, что Вы изучили в колледже или некоторой книге по универсальному программированию, затем продайте свою идею команде и запишите ее как допустимое если не предпочтительный метод. Все - справедливая игра в реальном мире.

, Если Вы следуете всем правилам программирования, преподававшим Вам в школе, или заказываете Вашу карьеру программирования, будет чрезвычайно ограничен. Можно, вероятно, пережить и иметь плодотворную карьеру, но ширина и ширина сред, доступных Вам, будут чрезвычайно ограничены. Если Вы знаете, как и почему правило там и может защитить его, это хорошо, если Вы только рассуждаете, "потому что мой учитель сказал так", хорошо это не так хорошо.

Примечание, что темы как это часто обсуждаются на рабочем месте и продолжат быть, в то время как компиляторы и процессоры (и языки) развиваются также - эти виды правил и не отстаивая Вашу позицию и возможно преподаваясь урок кем-то с другим мнением Вы привычка, продвигается.

Тем временем, затем просто сделайте то, что тот, который говорит самое громкое или несет самую большую палку, говорит (пока такое время, поскольку Вы - тот, который вопит самое громкое и несет самую большую палку).

4
ответ дан old_timer 4 November 2019 в 13:09
поделиться

Абсолютно нет. Неправильное использование их, хотя..., который плох.

Бессмысленно удаление их ради является просто этим... бессмысленным. Если Вы не знаете advanatages и недостатки, лучше держаться подальше и делают, поскольку Вы преподавались/изучались, но нет ничего неявно неправильно с глобальными переменными. Когда Вы понимаете, что за и против лучше принимают Ваше собственное решение.

7
ответ дан jheriko 4 November 2019 в 13:09
поделиться

Используя глобальные переменные похож на довольно широкую грязь под ковриком. Это - быстрое исправление, и намного легче в ближайшей перспективе, чем получение совка или вакуума для чистки его. Однако, если Вы когда-нибудь заканчиваете тем, что переместили коврик позже, Вы собираетесь иметь большую неожиданную путаницу внизу.

8
ответ дан gnovice 4 November 2019 в 13:09
поделиться

Как кто-то сказал (я перефразирую) в другом потоке "Правила как это, не должен быть поврежден, пока Вы полностью не понимаете последствий выполнения так".

существуют времена, когда глобальные переменные необходимы, или по крайней мере очень полезны (Работающий с определенными обратными вызовами системы, например). С другой стороны, они также очень опасны по всем причинам, которые Вам сказали.

существует много аспектов программирования, которое нужно, вероятно, оставить экспертам. Иногда Вам НУЖЕН очень острый нож. Но Вы не добираетесь для использования того, пока Вы не готовы...

11
ответ дан Brian Postow 4 November 2019 в 13:09
поделиться

Глобальные переменные обычно плохи, особенно если другие люди работают над тем же кодом и не хотят проводить 20 минут, ища все места, на переменную ссылаются. И добавление потоков, которые изменяют переменные, вводит совершенно новый уровень головных болей.

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

9
ответ дан Michel 4 November 2019 в 13:09
поделиться

Я ответил бы на этот вопрос с другим вопросом: Вы используете , одиночные элементы / Являются одиночными элементами плохо?

, поскольку (почти все) одноэлементное использование является прославленной глобальной переменной.

18
ответ дан Gavin Miller 4 November 2019 в 13:09
поделиться

Глобальные переменные должны только использоваться, когда у Вас нет альтернативы. И да, который включает Одиночные элементы. 90% времени, глобальные переменные представлены для сохранения стоимости раздавания параметра. И затем кодирование тестирования/обслуживания многопоточности/единицы происходит, и у Вас есть проблема.

Так да, в 90% глобальных переменных ситуаций плохи. Исключения вряд ли видно Вам в Ваших годах колледжа. Одно исключение я могу думать первое, что пришло на ум, имеет дело с по сути глобальными объектами, такими как таблицы прерываний. Вещи как соединение с БД кажутся , чтобы быть глобальными, но не.

36
ответ дан 4 November 2019 в 13:09
поделиться

Да, но Вы не несете расходы глобальных переменных, пока Вы не прекращаете работать в коде, который использует глобальные переменные, и начните писать что-то еще, что использует код, который использует глобальные переменные. Но стоимость все еще там.

, Другими словами, это - долгосрочная косвенная стоимость и как таковой, большинство людей думает, что это не плохо.

19
ответ дан GEOCHET 4 November 2019 в 13:09
поделиться

Глобальные переменные так плохи, как Вы делаете их, не меньше

при создании полностью инкапсулированной программы можно использовать globals. Это - "грех" для использования globals, но программирующие грехи являются в основном философскими.

, Если Вы проверяете L.in.oleum, Вы будете видеть язык, переменные которого только глобальны. Это неприступно, потому что библиотеки у всех нет выбора, кроме как использовать globals.

Тем не менее, если Вы имеете выбор и можете проигнорировать философию программиста, globals, не все настолько плохо.

Ни один не Gotos, если Вы используете их правильный.

большая "плохая" проблема состоит в том, что, если Вы используете их неправильно, люди кричат, катастрофические отказы высаживающегося на берег Марса, и мировые аварийные завершения.... или что-то как этот.

19
ответ дан Mankarse 4 November 2019 в 13:09
поделиться

Мой преподаватель раньше говорил что-то как: глобальные переменные использования хорошо при использовании их правильно. Я не думаю, что когда-либо становился хорошим в использовании их правильно, таким образом, я редко использовал их вообще.

60
ответ дан barneytron 4 November 2019 в 13:09
поделиться

Глобальные переменные плохи, если они позволяют Вам управлять аспектами программы, которая должна быть только изменена локально. В ООП globals часто конфликтуют с идеей инкапсуляции.

7
ответ дан Leonidas 4 November 2019 в 13:09
поделиться

Я думаю, что Ваш преподаватель пытается остановить дурную привычку, прежде чем она даже запустится.

Глобальные переменные имеют свое место, и как многие люди сказал, что знание, где и когда использовать их, может быть сложным. Таким образом, я думаю, а не вхожу во вшивый песчаный из почему, как, когда, и где из глобальных переменных Ваш преподаватель, решенный, чтобы просто запретить. Кто знает, он мог бы не запретить их в будущем.

7
ответ дан bong 4 November 2019 в 13:09
поделиться

Рано или поздно необходимо будет измениться, как та переменная установлена или что происходит, когда к ней получают доступ, или просто необходимо выследить, где она изменяется.

практически всегда лучше не иметь глобальные переменные. Просто запишите, что дамба добирается и методы установки, и быть железой Вы при необходимости в них день, неделя или месяц спустя.

1
ответ дан Bloodboiler 4 November 2019 в 13:09
поделиться

Если возможно, ваш код будет подвергнут интенсивной проверке во время разбирательства в Верховном суде , тогда вы должны избегать глобальных переменных.

См. Эту статью: Код багги-алкотестера отражает важность проверки источника

Были некоторые проблемы с стиль кода, который был идентифицирован по обоим исследованиям. Один из стилистических вопросы, которые волновали рецензентов было широкое использование незащищенных глобальные переменные . Это считается плохая форма, потому что это увеличивает риск того, что состояние программы будет стать несовместимыми или эти ценности будет случайно изменен или перезаписаны. Исследователи также выразил некоторую озабоченность по поводу факта эта десятичная точность не поддерживается последовательно на протяжении всего code.

Блин, держу пари, что эти разработчики жалеют, что не использовали глобальные переменные!

18
ответ дан 23 November 2019 в 03:31
поделиться

Важно помнить об общей цели: ясность

Правило «без глобальных переменных» существует, потому что в большинстве случаев глобальные переменные делают код менее значимым. Чисто.

Однако, как и многие правила, люди запоминают правило, а не то, для чего оно предназначено.

Я видел программы, которые, кажется, удваивают размер кода, передавая огромное количество параметров просто для того, чтобы избежать зла глобальных переменных. В конце концов, использование глобальных переменных сделало бы программу более понятной для тех, кто ее читает. Бездумно придерживаясь слова правила, оригинальный программист потерпел неудачу в смысле правила.

Так что да, глобальные переменные часто бывают плохими. Но если вы чувствуете, что в конце концов намерения программиста проясняются за счет использования глобальных переменных, тогда продолжайте. Однако помните о падении ясности, которое происходит автоматически, когда вы заставляете кого-то обращаться ко второму фрагменту кода (глобальным переменным), чтобы понять, как работает первый фрагмент.

79
ответ дан 23 November 2019 в 03:31
поделиться