Вот хорошая статья, объясняющая, почему глобальные переменные плохи
Почему следует избегать использования глобальных переменных, когда они не нужны?
Нелокальность - исходный код легче всего понять, когда объем его отдельных элементов ограничен. Глобальные переменные могут быть прочитаны или изменены любой частью программы, что затрудняет запоминание или рассуждение о каждом возможном использовании. Отсутствие контроля доступа или проверки ограничений - глобальная переменная может быть получена или установлена любой частью программы, и любые правила, касающиеся ее использования, могут быть легко нарушены или забыты.
Неявная связь. Программа со многими глобальными переменными часто имеет тесную связь между некоторыми из этих переменных и взаимосвязь между переменными и функциями. Группирование связанных элементов в единое целое обычно приводит к лучшим программам.
Проблемы с распределением памяти. В некоторых средах есть схемы распределения памяти, которые затрудняют выделение глобальных объектов. Это особенно верно для языков, где «конструкторы» имеют побочные эффекты, отличные от распределения (потому что в этом случае вы можете выразить небезопасные ситуации, когда два глобальных объекта взаимно зависят друг от друга). Кроме того, при динамическом связывании модулей может быть неясно, есть ли у разных библиотек свои собственные экземпляры глобальных объектов или они являются общими.
Тестирование и ограничение - источник, который использует глобальные переменные, несколько сложнее протестировать, потому что нельзя легко настроить «чистую» среду между запусками. В более общем плане источник, который использует глобальные службы любого вида, которые явно не предоставлены этому источнику, трудно протестировать по той же причине.
Добавить глобальные объекты очень просто. Их легко получить в привычку объявлять. Это намного быстрее, чем думать о хорошем дизайне.
Глобальные переменные не так плохи, как вы думаете, их просто следует избегать, когда в них нет необходимости. Глобальные переменные могут иметь хорошее применение для переменных, которые будут использоваться в программе, при этом не забывайте, что вы всегда должны отслеживать, где эта переменная принимает изменения; но для переменных, которые, как правило, используются только в ограниченных частях программы, это хорошая причина, чтобы не делать их глобальными.
person
TStamper
schedule
16.05.2009