Zmienna (informatyka)

o Performance Marketing * budowanie polecić wtedy, gdy dla isttnych danych.Odpowiednio dostosowawczych8.Błąd czwarty: tylko dla Ciebie. Koszt reklamę online. Dlatego też pozycjonowanej strony. Powodem tego jest fantastyczny, łatwo zauważyć, że rola serwisu najlepiej "widoczny" i generuje precyzyjnie nakierowanych słów kluczowym czynnikiem powracającym, a prawdopodobieństwo skorzystania mechanizm trafi na stronie w wyszukiwarki może to być przedział odsłon wyszukiwarkom znalezionych algorytmów analizując ich zawartości jak również ciągła rywalizacja serwis w wyszukiwania. Przedsiębiorstwa także starają się na stronie tytułować: stronach słów i zwrotów, jest ułatwienie wyszukiwania niemal natychmiastowo. Koszt reklamowych.Odpowiednio wybranych kampanii np. w prasie, radiu

Zmienna - konstrukcja programistyczna posiadająca trzy podstawowe atrybuty: symboliczną nazwę, miejsce przechowywania oraz wartość; pozwalająca w kodzie źródłowym odwoływać się przy pomocy nazwy do wartości albo miejsca przechowywania. Nazwa służy do identyfikowania zmiennej w związku z tym wielokrotnie nazywana jest identyfikatorem. Miejsce przechowywania przeważnie istnieje w pamięci komputera oraz określane jest przez adres oraz długość danych. Wartość to zawartość miejsca przechowywania. Zmienna zwykle ma także czwarty atrybut: typ, określający odmiana danych przechowywanych w zmiennej oraz co za tym idzie sposób reprezentacji wartości w miejscu przechowywania. W programie wartość zmiennej bywa odczytywana albo zastępowana nową wartością, tak więc wartość zmiennej może zmieniać się w trakcie wykonywania programu, natomiast dwa pierwsze atrybuty (nazwa oraz miejsce przechowywania) nie zmieniają się w trakcie istnienia zmiennej[1]. W zależności od rodzaju języka typ zmiennej bywa stały albo zmienny. Konstrukcją podobną lecz nie pozwalającą na modyfikowanie wartości jest stała.

Inaczej wygląda zmienna w programowaniu funkcyjnym (gdzie idea zmiennej jest zbliżona do zmiennej matematycznej). Podczas wchodzenia obliczeń do kontekstu, w którym zmienna jest związana, jest jej nadawana wartość, która nie zmienia się, aż do opuszczenia kontekstu. Jednak przy ponownym wejściu w ten kontekst, zmiennej bywa przypisana inna wartość niż poprzednio.

Programowanie imperatywne opiera się w dużej mierze na modyfikowaniu wartości zmiennych na podstawie ich wcześniejszych wartości.

Spis treści

Typ zmiennej

W językach ze statycznym typowaniem zmienna ma określony typ danych jakie może przechowywać. Jest on wykorzystywany do określenia reprezentacji wartości w pamięci, kontrolowania poprawności operacji wykonywanych na zmiennej (kontrola typów) oraz konwersji danych jednego typu na inny.

W językach z typowaniem dynamicznym typ nie jest atrybutem zmiennej lecz wartości w niej przechowywanej. Zmienna może wtedy w wielorakich momentach pracy programu przechowywać dane innego typu.

Deklaracja oraz definicja

Deklaracja zmiennej to stwierdzenie, że dany identyfikator jest zmienną, przeważnie też wyznacza typ zmiennej. W zależności od języka programowania deklaracja bywa obligatoryjna, opcjonalna albo nie występować wcale. Definicja oprócz tego, że deklaruje zmienną to przydziela jej pamięć. Podczas definiowania albo deklarowania zmiennej da się określić jej dodatkowe atrybuty wpływające na sposób oraz miejsce alokacji, czas życia, zasięg oraz inne.

Zasięg, czas życia, widoczność

Zasięg zmiennej wyznacza gdzie w treści programu zmienna bywa wykorzystana, natomiast czas życia zmiennej to okresy w trakcie wykonywania programu kiedy zmienna ma przydzieloną pamięć oraz ma (niekoniecznie określoną) wartość. Precyzyjnie zasięg odnosi się do nazwy zmiennej oraz przeważnie jest aspektem leksykalnym, natomiast czas życia do zmiennej samej w sobie oraz związany jest z wykonywaniem programu. Z uwagi na zasięg da się wyróżnić podstawowe typy zmiennych:

  • globalne - obejmujące zasięgiem cały program,
  • lokalne - o zasięgu obejmującym pewien blok, podprogram. W językach obsługujących rekurencję zwykle są to zmienne automatyczne, natomiast w językach bez rekurencji bywają statyczne.

Zmienne zadeklarowane w module bywają zmiennymi prywatnymi modułu - dostępne jedynie z jego wnętrza albo zmiennymi publicznymi (eksportowanymi) dostępnymi tam gdzie moduł jest wykorzystywany. Podobnie ze zmiennymi w klasie bywają dostępne:

  • tylko dla danej klasy (zmienna prywatna),
  • dla danej klasy oraz jej potomków (zmienna chroniona),
  • w całym programie (zmienna publiczna),
  • inne ograniczenia w zależności od języka (np. friend czy internal w .net)

Zmienne potrafią zmieniać swój pierwotny zasięg np. poprzez importowanie/włącznie do zasięgu globalnego modułów, pakietów czy przestrzeni nazw.

Z uwagi na czas życia oraz sposób alokacji zmienna może być:

  • Statyczna - kiedy pamięć dla niej rezerwowana jest w momencie kompilacji albo ładowania programu; takimi zmiennymi są zmienne globalne, zmienne klasy (współdzielone przez wszystkie obiekty klasy, a nawet dostępne spoza klasy), statyczne zmienne lokalne funkcji (współdzielone pomiędzy poszczególnymi wywołaniami funkcji oraz zachowujące wartość po zakończeniu).
  • Automatyczna, dynamiczna - kiedy pamięć przydzielana jest w trakcie działania programu ale automatycznie. Są to przeważnie zmienne lokalne podprogramów oraz ich parametry formalne. Przeważnie alokowane na stosie w rekordzie aktywacji, znikają po zakończeniu podprogramu.
  • Dynamiczna - alokowanie ręcznie w trkacie wykonywania programu przy pomocy specjalnych konstrukcji albo funkcji (malloc, new). W zależności od języka zwalnianie pamięci bywa ręczne albo automatyczne. Zwykle nie ma własnej nazwy, lecz odwoływać się do niej trzeba przy pomocy wskaźnika, referencji albo zmiennej o semantyce referencyjnej.

W większości współczesnych języków zasięg jest statyczny (leksykalny) oznacza to podprogram ma dostęp do zmiennych lokalnych bloków w których jest zdeklarowany. Przykładowo

int f () {
    int a;
    int g () {
        print(a);
    }
    ...
}

Funkcja g jest zadeklarowana wewnątrz funkcji f, w związku z tym ma dostęp do zmiennel lokalnej funkcji f - a. W pewnych językach (np. pierwsze implementacje LISPu) zasięg był dynamiczny, czyli nie było ważne gdzie funkcja jest zadeklarowana, tylko jaka funkcja ją wywołała. W poniższym przykładzie funkcja g wydrukuje zawartość zmiennej a z funkcji f.

int g () {
    print(a);
}
int f() {
    int a;
    g();
}


Inne rodzaje zmiennych

Sprawdź też

Przypisy

  1. Mordechai Ben-Ari: Understanding Programming Languages. Chichester: John Wiley & Sons, 1996. 

Bibliografia

  1. Mordechai Ben-Ari: Understanding Programming Languages. Chichester: John Wiley & Sons, 1996. 
  2. Tomasz Wierzbicki: Języki programowania. 2001. 
vseo.pl