Zmienna globalna
Z Wikipedii
Zmienna globalna to zmienna istniejąca przez cały czas życia programu, i widziana z wielu miejsc w programie.
Nadużywanie zmiennych globalnych może prowadzić do poważnych problemów, takich jak:
- w przypadku programów wielowątkowych, zmienna taka może się zmienić "sama z siebie".
- jeśli funkcja używa zmiennej globalnej jako zmiennej pomocniczej, niemożliwe może być jej rekursywne wywołanie
- zmienne globalne zaśmiecają przestrzeń nazw
- na działanie danej części kodu może mieć wpływ kod zupełnie niezwiązany, o ile oba używają tej samej zmiennej globalnej, i jeden z nich ją modyfikuje.
- zmienne globalne mogą kolidować ze zmiennymi lokalnymi (te drugie przesłaniają zmienne globalne o ile posiadają identyczne nazwy).
Do zalecanych rozwiązań należą:
- używanie zmiennych statycznych o ograniczonym zakresie widoczności, takich jak zmienne static w C - zapobiega niepożądanym interakcjom
- zamykanie zmiennych globalnych jako pól statycznych w klasach (najczęściej w klasach abstrakcyjnych)
- zabezpieczanie dostępu do zmiennych globalnych blokadami.
- przerobienie programu tak żeby korzystał z mniejszej liczby zmiennych globalnych.
- nazywanie zmiennych globalnych w sposób uniemożliwiający kolizję nazw (jest to obowiązkowe w Ruby), lub też deklarowanie w każdej funkcji z których zmiennych globalnych ona korzysta (PHP).
W wielu sytuacjach nie da się uniknąć istnienia zmiennych globalnych - np. w programach języku C pisanych na urządzenia gdzie brak jest możliwości dynamicznej alokacji pamięci, stosowanie zmiennych globalnych jest jedynym możliwym sposobem na przekazanie większej liczby parametrów z jednej funkcji do drugiej.
Niektóre języki programowania domyślnie po utworzeniu zmiennej przyjmują, że jest to zmienna o zakresie globalnym - czyli widoczna w dowolnym miejscu programu.