Zmienna (informatyka): Różnice pomiędzy wersjami
[wersja przejrzana] | [wersja nieprzejrzana] |
Usunięta treść Dodana treść
Wycofano ostatnią zmianę treści (wprowadzoną przez 37.248.163.18) i przywrócono wersję 52620749 autorstwa Ignasiak |
drobne redakcyjne |
||
Linia 1:
{{inne znaczenia|informatyki|[[zmienna|inne znaczenia]]}}
'''Zmienna'''
Inaczej wygląda zmienna w [[programowanie funkcyjne|programowaniu funkcyjnym]] (gdzie idea zmiennej jest zbliżona do [[zmienna (matematyka)|zmiennej matematycznej]]). Podczas wchodzenia obliczeń do [[kontekst]]u, 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 może być przypisana inna wartość niż poprzednio.
Linia 8:
== Typ zmiennej ==
W językach ze [[typowanie statyczne|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 [[konwersja typu|konwersji]] danych jednego typu na inny.
W językach z [[typowanie dynamiczne|typowaniem dynamicznym]] typ nie jest atrybutem zmiennej lecz wartości w niej przechowywanej. Zmienna może wtedy w różnych momentach pracy programu przechowywać dane innego typu.
Linia 16:
== Zasięg, czas życia, widoczność ==
[[Zasięg (programowanie)|Zasięg zmiennej]] określa, gdzie w treści programu zmienna może być wykorzystana, natomiast czas życia zmiennej to okresy w trakcie wykonywania programu, gdy zmienna ma przydzieloną pamięć i posiada (niekoniecznie określoną) wartość. Precyzyjnie zasięg odnosi się do nazwy zmiennej i przeważnie jest aspektem leksykalnym, natomiast czas życia do zmiennej samej w sobie i związany jest z wykonywaniem programu. Ze względu na zasięg można wyróżnić podstawowe typy zmiennych:
* [[zmienna lokalna|lokalne]]
▲* [[Zmienna globalna|globalne]] - obejmujące zasięgiem cały program,
Zmienne zadeklarowane w [[moduł (informatyka)|module]] mogą być zmiennymi prywatnymi modułu
▲* [[zmienna lokalna|lokalne]] - o zasięgu obejmującym pewien blok, podprogram. W językach obsługujących [[rekurencja|rekurencję]] zazwyczaj są to zmienne automatyczne, natomiast w językach bez rekurencji mogą być statyczne.
▲Zmienne zadeklarowane w [[moduł (informatyka)|module]] mogą być zmiennymi prywatnymi modułu - dostępne wyłącznie z jego wnętrza lub zmiennymi publicznymi (eksportowanymi) dostępnymi tam gdzie moduł jest wykorzystywany.
* tylko dla danej klasy (zmienna prywatna),
* dla danej klasy i jej [[Dziedziczenie (programowanie)|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 mogą zmieniać swój pierwotny zasięg np. poprzez importowanie/włącznie do zasięgu globalnego modułów, pakietów czy przestrzeni nazw.
Ze względu na czas życia i sposób alokacji zmienna może być:
* Statyczna
* Automatyczna, dynamiczna
* Dynamiczna
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
Linia 43 ⟶ 41:
}
</syntaxhighlight>
Funkcja ''g'' jest zadeklarowana wewnątrz funkcji ''f'', w związku z tym ma dostęp do zmiennej lokalnej funkcji ''f''
<syntaxhighlight lang="c">
int g () {
|