Różnica między zmienną lokalną i globalną
Kluczowe różnice między zmienną lokalną a zmienną globalną
- Zmienna lokalna jest deklarowana wewnątrz funkcji, podczas gdy zmienna globalna jest deklarowana poza funkcją.
- Zmienne lokalne są tworzone, gdy funkcja rozpoczyna wykonywanie i są tracone po zakończeniu funkcji, z drugiej strony zmienna globalna jest tworzona w momencie rozpoczęcia wykonywania i tracona po zakończeniu programu.
- Zmienna lokalna nie zapewnia udostępniania danych, natomiast zmienna globalna zapewnia udostępnianie danych.
- Zmienne lokalne są przechowywane na stosie, podczas gdy zmienna globalna jest przechowywana w stałym miejscu określonym przez kompilator.
- Przekazywanie parametrów jest wymagane w przypadku zmiennych lokalnych, podczas gdy w przypadku zmiennej globalnej nie jest to konieczne
Co to jest zmienna?
Zmienna to nazwa przypisana do obszaru pamięci, którą program może manipulować. Typ zmiennej określa rozmiar i układ pamięci zmiennej.
Określa również zakres wartości, które muszą być przechowywane w pamięci, a także rodzaj operacji, jakie można zastosować do danej zmiennej.
Zakres zmiennych
Zasięg zmiennej to po prostu czas życia zmiennej. Jest to blok kodu, w ramach którego zmienna ma zastosowanie lub jest aktywna. Na przykład:
function foo(){ var x; }
Deklarujesz zmienną „x” wewnątrz funkcji „foo”. Zasięg tej zmiennej pozostaje wewnątrz tej funkcji i nie można jej używać poza tą funkcją.
Istnieją trzy miejsca, w których można zadeklarować zmienne w języku programowania:
- Wewnątrz funkcji lub bloku: Zmienne lokalne
- Poza wszystkimi funkcjami: Zmienne globalne
- W definicji parametrów funkcji: Parametry formalne
Zmienna lokalna
Zmienna lokalna jest zdefiniowany jako typ zmiennej zadeklarowanej w bloku programowania lub podprogramach. Może być używany tylko wewnątrz podprogramu lub bloku kodu, w którym został zadeklarowany. Zmienna lokalna istnieje, dopóki blok funkcji nie jest wykonywany. Po tym czasie zostanie automatycznie zniszczona.
Przykład zmiennej lokalnej
public int add(){ int a =4; int b=5; return a+b; }
Tutaj „a” i „b” są zmiennymi lokalnymi
Zmienna globalna
A Zmienna globalna w programie jest zmienną zdefiniowaną poza podprogramem lub funkcją. Ma zasięg globalny, co oznacza, że zachowuje swoją wartość przez cały czas trwania programu. W związku z tym można uzyskać do niego dostęp w całym programie za pomocą dowolnej funkcji zdefiniowanej w programie, chyba że jest ona zacieniona.
Przykład:
int a =4; int b=5; public int add(){ return a+b; }
Tutaj „a” i „b” są zmiennymi globalnymi.
Zmienna lokalna a zmienne globalne
Oto kilka podstawowych różnic między zmiennymi lokalnymi i globalnymi.
Parametr | Lokalny | Globalny |
---|---|---|
Zakres | Jest zadeklarowana wewnątrz funkcji. | Jest zadeklarowana poza funkcją. |
Wartość: | Jeśli nie zostanie zainicjowany, przechowywana jest wartość śmieci | Jeżeli nie zostało zainicjowane, domyślnie zapisywane jest zero. |
Życie | Jest tworzony, gdy funkcja rozpoczyna wykonywanie i tracona, gdy funkcje się kończą. | Jest tworzony przed rozpoczęciem globalnego wykonywania programu i tracony po zakończeniu programu. |
Udostępnianie danych | Udostępnianie danych nie jest możliwe, ponieważ dostęp do danych zmiennej lokalnej może uzyskać tylko jedna funkcja. | Udostępnianie danych jest możliwe, ponieważ wiele funkcji może uzyskać dostęp do tej samej zmiennej globalnej. |
Parametry | Aby zmienne lokalne mogły uzyskać dostęp do wartości w innej funkcji, wymagane jest przekazywanie parametrów | Przekazywanie parametrów nie jest konieczne w przypadku zmiennej globalnej, ponieważ jest ona widoczna w całym programie |
Modyfikacja wartości zmiennej | Gdy wartość zmiennej lokalnej zostanie zmodyfikowana w jednej funkcji, zmiany nie będą widoczne w innej funkcji. | Gdy wartość zmiennej globalnej zostanie zmodyfikowana w jednej funkcji, zmiany będą widoczne w pozostałej części programu. |
Dostęp przez | Dostęp do zmiennych lokalnych można uzyskać za pomocą instrukcji wewnątrz funkcji, w której są zadeklarowane. | Dostęp do zmiennych globalnych można uzyskać za pomocą dowolnej instrukcji w programie. |
Magazyn pamięci | Jest przechowywany na stosie, chyba że określono inaczej. | Jest przechowywany w stałej lokalizacji określonej przez kompilator. |
Zalety stosowania zmiennych globalnych
- Dostęp do zmiennej globalnej można uzyskać ze wszystkich funkcji lub modułów programu
- Wystarczy jednorazowo zadeklarować zmienną globalną poza modułami.
- Idealnie nadaje się do przechowywania „stałych”, ponieważ pomaga zachować spójność.
- Zmienna globalna jest przydatna, gdy wiele funkcji uzyskuje dostęp do tych samych danych.
Zalety stosowania zmiennych lokalnych
- Użycie zmiennych lokalnych gwarantuje, że wartości zmiennych pozostaną niezmienione podczas wykonywania zadania
- Jeśli kilka zadań zmienia pojedynczą zmienną, która działa jednocześnie, wynik może być nieprzewidywalny. Jednak zadeklarowanie jej jako zmiennej lokalnej rozwiązuje ten problem, ponieważ każde zadanie utworzy własną instancję zmiennej lokalnej.
- Zmiennym lokalnym można nadać tę samą nazwę w różnych funkcjach, ponieważ są one rozpoznawane tylko przez funkcję, w której są zadeklarowane.
- Zmienne lokalne są usuwane po zakończeniu dowolnej funkcji i zwalniają zajmowaną przez nią przestrzeń pamięci.
Wady stosowania zmiennych globalnych
- Zbyt dużo zmiennych zadeklarowanych jako globalne, wówczas pozostają one w pamięci do czasu zakończenia wykonywania programu. Może to być przyczyną problemu braku pamięci.
- Dane można modyfikować dowolną funkcją. Dowolna instrukcja zapisana w programie może zmienić wartość zmiennej globalnej. Może to dawać nieprzewidywalne rezultaty w środowiskach wielozadaniowych.
- Jeśli zmienne globalne zostaną wycofane z powodu refaktoryzacji kodu, będziesz musiał zmienić wszystkie moduły, w których są wywoływane.
Wady stosowania zmiennych lokalnych
- Proces debugowania zmiennej lokalnej jest dość skomplikowany.
- Wspólne dane muszą być przesyłane wielokrotnie, ponieważ wymiana danych między modułami nie jest możliwa.
- Mają bardzo ograniczony zakres.
Co jest bardziej przydatne?
Zmienna lokalna i globalna równie ważna przy pisaniu programu w dowolnym języku. Jednakże duża liczba zmiennych globalnych może zajmować ogromną pamięć. Niepożądana zmiana zmiennych globalnych staje się trudna do zidentyfikowania. Dlatego wskazane jest unikanie deklarowania niepożądanych zmiennych globalnych.