Глобальна змінна

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

У програмуванні, глобальна змінна (англ. global variable) — змінна, яка доступна в будь-якій області видимості, за винятком перекриття її іншою змінною з тим самим ім'ям. Механізм взаємодій з глобальними змінними називається механізмом глобального середовища. Парадигма глобального середовища протиставляється парадигмі місцевого середовища, згідно з якою всі змінні місцеві без використання спільної пам'яті (тобто всі взаємодії мають відбуватись через обмін повідомленнями).

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

Глобальні змінні широко використовуються для передачі інформації між різними частинами коду, які не викликають одне одного, такими як конкурентні потоки або обробники сигналів. Без правильного блокування доступу, наприклад із допомогою семафора, код із використанням глобальних змінних не буде потоково безпечним, за винятком змінних тільки для читання розташованих захищеній ділянці пам'яті. Із збільшенням кількості змінних і, відповідно, блокувань збільшуються ймовірність взаємних блокувань.

Чому треба уникати глобальних змінних коли це можливо[ред.ред. код]

  • Повсюдність — сирцевий код легше розуміти коли область видимості його елементів обмежена. Глобальні змінні можуть бути змінені будь-де в програмі, що ускладнює згадати де саме вони можуть змінюватись.
  • Неявне зчеплення — програми з багатьма глобальними змінними часто мають щільне зчеплення між цими змінними, а також між цими змінними і функціями. Групування пов'язаних елементів в зчеплені блоки, зазвичай, призводить до покращення програм.
  • Питання конкурентності — якщо глобальні змінні можуть бути доступні з кількох нитях виконання, синхронізація стає необхідною, хоча й часто нехтуваною. Динамічне компонування модулів з глобальними змінними може в результаті видати неттє-небезпечну систему навіть, якщо всі окремі частини були добре протестовані в багатьох середовищах.
  • Захаращення простору імен — глобальні змінні доступні звідусіль. Ви можете неочікуванно використати глобальну змінну, хоча намагалися змінити місцеву змінну. Також, якщо ви колись спробуєте скомпонувати разом модулі, що мають однакове ім'я глобальної змінної, тоді ви можете отримати або помилку від компонувальника, або, що набагато гірше, компонувальник просто буде вважати, що існує лише одна змінна з таким ім'ям.

Посилання[ред.ред. код]