Zmienna lokalna

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj

Zmienna lokalna w programowaniu, to zmienna zdefiniowana i dostępna wyłącznie w określonym bloku programu, tworzona w momencie wejścia do tego bloku oraz usuwana z pamięci w momencie wyjścia z danego bloku. Tym samym zasięg zmiennej lokalnej oraz czas jej życia pokrywaną się i obejmują blok, w którym zmienna lokalna jest zdefiniowana. Zmienna lokalna ma więc określony, ograniczony zakres istnienia i dostępności. To w jakich blokach programowych można tworzyć zmienne lokalne definiuje składnia konkretnego języka programowania. Typowymi blokami, w których można w różnych językach programowania tworzyć zmienne lokalne, są moduły, podprogramy oraz w pewnych językach programowania także instrukcje blokowe (lub inne instrukcje strukturalne, np. pętla for w języku C[1][2][3] i inne). Zmienna lokalna w danym bloku przesłania zdefiniowaną zmienną globalną, lub zmienną lokalną z bloku nadrzędnego, o tym samym identyfikatorze. Tym samym programista nie może wprost, za pomocą danego identyfikatora, w bloku o zdefiniowanej zmiennej lokalnej, odwołać się do zmiennej zewnętrznej o tym samym identyfikatorze co zdefiniowana zmienna lokalna, choć może to zrobić za pomocą innych konstrukcji, jeżeli są dostępne w danym języku programowania, np. selekcja, wskaźniki, przemianowanie, nakładanie zmiennych lub inne.

Przykłady deklaracji zmiennych lokalnych[edytuj | edytuj kod]

Przykłady deklaracji zmiennych lokalnych
C[1][2][3], C++[3] Pascal[4][5] PL/I[6][7]
int func(int x)
 {
   /* zmienna lokalna w podprogramie */
   int y;
   ...
   {
     /* zmienna lokalna 
        w instrukcji blokowej */
     int z; 
     ...
   }
 }
function func(x: integer): integer;
{zmienna lokalna w podprogramie}
var y: integer;
begin
   ...
   begin
     { brak możliwości deklaracji zmiennej
       lokalnej w instrukcji grupującej }
     ...
   end
end;
func: PROC(X) RETURNS(FIXED(5,0));
  DCL X FIXED(5,0);
  /* zmienna lokalna w podprogramie */
  DCL Y FIXED(5,0);
  ...
  BEGIN
     /* zmienna lokalna 
        w instrukcji blokowej */
     DCL Z FIXED(5,0); 
     ...
  END;
END func;

Porównanie z innymi rodzajami zmiennych[edytuj | edytuj kod]

Jak wyżej zaznaczono zmienna lokalna tworzona jest przy wejściu do bloku i usuwana wraz z wyjściem z bloku. W bloku takim mogą być także tworzone zmienne statyczne. Różnica pomiędzy takimi zmiennymi a zmiennymi lokalnymi jest taka, że zmienne statyczne nie są usuwane z pamięci przy wyjściu z bloku tak jak to ma miejsce w odniesieniu do zmiennych lokalnych, ale przechowują aktualną wartość do następnego wejścia do bloku (mimo że są niedostępne w bloku zewnętrznym, tak jak zmienne lokalne). Oznacza to, że jeżeli w danym bloku zdefiniowane będą dwie zmienne: jedna lokalna, a druga statyczna, i zostaną one zainicjowane w ich definicjach, to przypisanie wartości inicjującej do zmiennej lokalnej nastąpi za każdym razem przy wejściu do danego bloku, a do zmiennej statycznej tylko raz przy pierwszym wejściu do danego bloku.

Porównanie zmiennej lokalnej, statycznej i globalnej w języku język C[1][2][3], C++[3]
element zmienna lokalna zmienna statyczna zmienna globalna
kod źródłowy
#include "stdio.h"
int x;
int plus(int liczba)
 {
   int x=10;
   x=x+liczba;
   printf("Wynik: %d\n",x);
 }
void main()
 {
   x=1; /* bez znaczenia */
   x=plus(1);
   x=plus(2);
   x=plus(3);
 }
#include "stdio.h"
int x;
int plus(int liczba)
 {
   static int x=10;
   x=x+liczba;
   printf("Wynik: %d\n",x);
 }
void main()
 {
   x=1; /* bez znaczenia */
   x=plus(1);
   x=plus(2);
   x=plus(3);
 }
#include "stdio.h"
int x;
int plus(int liczba)
 {
   /* brak zmiennej lokalnej */
   x=x+liczba;
   printf("Wynik: %d\n",x);
 }
void main()
 {
   x=1;
   x=plus(1);
   x=plus(2);
   x=plus(3);
 }
wyniki wyprowadzone na konsolę

Wynik: 11
Wynik: 12
Wynik: 13

Wynik: 11
Wynik: 13
Wynik: 16

Wynik: 2
Wynik: 4
Wynik: 7

Zmienne lokalne w językach programowania[edytuj | edytuj kod]

Zmienne lokalne w językach programowania
Język programowania moduł podprogram instrukcja blokowa inne
Basic[8][9] (wersje pierwotne) link= alt=N link= alt=N link= alt=N link= alt=N
C[1][2][3], C++[3] link= alt=T link= alt=T link= alt=T pętla for
Pascal[4][5] link= alt=N link= alt=T link= alt=N link= alt=N
PL/I[6][7] link= alt=T link= alt=T link= alt=T link= alt=N
Turbo Pascal[5] link= alt=T link= alt=T link= alt=N link= alt=N

Przypisy

  1. 1,0 1,1 1,2 1,3 Brian W. Kernighan, Dennis M. Ritche: Język C. Warszawa: Wydawnictwa Naukowo-Techniczne, 1988, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-1067-3. (pol.)
  2. 2,0 2,1 2,2 2,3 Jan Bielecki: Turbo C z grafiką na IBM PC. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990, seria: Mikrokomputery. ISBN 83-204-1101-7. (pol.)
  3. 3,0 3,1 3,2 3,3 3,4 3,5 3,6 Jan Bielecki: Od C do C++, programowanie obiektowe w języku C. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990. ISBN 83-204-1332-X. (pol.)
  4. 4,0 4,1 Michał Iglewski, Jan Madey, Stanisław Matwin: Pascal. Język wzorcowy – Pascal 360. Wyd. wydanie trzecie – zmienione. Warszawa: Wydawnictwa Naukowo-Techniczne, 1984, seria: Biblioteka Inżynierii Oprogramowania. ISSN 0867-6011. ISBN 83-85060-53-7. (pol.)
  5. 5,0 5,1 5,2 Andrzej Marciniak: Borland Pascal 7.0. Poznań: Nakom, 1994, seria: Biblioteka Użytkownika Mikrokomputerów. ISSN 0867-6011. ISBN 83-85060-53-7. (pol.)
  6. 6,0 6,1 Jan Bielecki: Rozszerzony PL/I i JCL w systemie OS/RIAD. Warszawa: Państwowe Wydawnictwo Naukowe, 1986, seria: Biblioteka Informatyki. ISBN 83-01-06146-4. (pol.)
  7. 7,0 7,1 M. I. Auguston i inni: Programowanie w języku PL/1 OS JS. Warszawa: Państwowe Wydawnictwo Naukowe, 1988. ISBN 83-01-07463-9. (pol.)
  8. Zbigniew Czech, Krzysztof Nałęcki, Stanisław Wołek: Programowanie w języku BASIC. Wyd. drugie uzupełnione. Warszawa: Wydawnictwa Naukowo-Techniczne, 1985. ISBN 83-204-0776-1. (pol.)
  9. Wacław Iszkowski: Nauka programowania w języku BASIC dla początkujących. Warszawa: Wydawnictwa Naukowo-Techniczne, 1987, seria: Mikrokomputery. ISBN 83-204-0834-2. (pol.)

Bibliografia[edytuj | edytuj kod]

  1. Michael Marcotty, Henry Ledgord, tłumaczenie: Krystyna Jerzykiewicz: W kręgu języków programowania. Warszawa: Wydawnictwa Naukowo-Techniczne, 1980, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-1342-7. (pol.)
  2. John E. Nicholls: Struktura języków programowania. Warszawa: Wydawnictwa Naukowo-Techniczne, 1980, seria: Informatyka. ISBN 83-204-0246-8. (pol.)