Proměnná je pojmenované úložiště hodnoty, kterou lze měnit. V úvodní kapitole jsme viděli, jak můžeme měnit hodnotu jedné proměnné. V této kapitole budeme uvažovat i složitější situace, kdy dochází k interakci mezi více proměnnými a je potřeba rozlišovat mezi jménem a hodnotou proměnné.
Jméno vs. hodnota
Proměnná má jméno a hodnotu. Pomocí jména se na proměnnou v programu odkazujeme, když chceme její hodnotu použít nebo změnit. Mezi jménem a hodnotou je vhodné rozlišovat, například v příkazu vypiš x
musí být x
jméno proměnné, ale vypíše se její hodnota (nikoliv jméno). Pokud chceme kreslit kolečka rostoucí velikosti, použijeme proměnnou se jménem r
nebo poloměr
, která bude postupně nabývat hodnot 10, 20, 30 atd.
Typ proměnné
Proměnné nemusí být jen čísla. Kromě jména a hodnoty mají proto proměnné ještě typ, což může být například celé číslo, text ("mrkev"
), nebo logická hodnota (pravda
/ nepravda
).
Změna hodnoty
Přiřazovací příkaz umožňuje nastavit novou hodnotu proměnné, nebo upravit hodnotu stávající. Příkaz x ← 3
nastaví hodnotu proměnné x
na 3
, příkaz x ← x + 1
zvýší hodnotu proměnné x
o 1
. Na levé straně přiřazovacího příkazu je proměnná, kterou měníme, na pravé straně může být konkrétní hodnota, proměnná, nebo libovolný výraz.
Pokud je na pravé straně výraz, nejprve se vyhodnotí a výsledek se nastaví jako nová hodnota proměnné. Příkaz x ← 1 + 1
nastaví hodnotu proměnné x
na 2. Výraz na pravé straně může obsahovat proměnné. Příkaz x ← y + 1
nastaví hodnotu proměnné x
na hodnotu o 1 vyšší než je aktuální hodnota y
.
Více jmen pro jednu hodnotu
Přiřazovací příkaz x ← y
nastaví hodnotu proměnné x
na hodnotu proměnné y
. Hodnota proměnné y
se přitom nemění.
Po provedení přiřazovacího příkazu x ← y
mají obě proměnné stejnou hodnotu. Pořád jde však o dvě různé proměnné – pokud do proměnné y
přiřadíme novou hodnotu, proměnnou x
tím neovlivníme.
Prohození hodnot proměnných
Po provedení příkazu x ← y
mají obě proměnné stejnou hodnotu. K prohození hodnot dvou proměnných je proto potřeba pomocné proměnné. Hodnoty prohodí následující trojice příkazů (pro konkrétnější představu předpokládejme x = 1, y = 2
):
p ← x
(uložíme si 1 do pomocné proměnné)
x ← y
(x přenastavíme na 2)
y ← p
(y přenastavíme na 1)
Mýty o přiřazovacím příkazu
Proměnná, do které nebylo nic přiřazeno, má hodnotu 0. |
Počáteční hodnota proměnné není určená, je potřeba do ní nějakou hodnotu přiřadit. |
Proměnná si pamatuje všechny hodnoty, které do ní byly v minulosti přiřazeny. |
V proměnné je uložená pouze poslední přiřazená hodnota. |
Proměnná automaticky sčítá všechny přiřazené hodnoty. |
V proměnné je uložená pouze poslední přiřazená hodnota. |
Přiřazovací příkaz x ← y přesouvá hodnotu, tj. y pak nemá hodnotu. |
Přiřazovací příkaz x ← y nastaví x , proměnnou y nemění. |
Přiřazovací příkaz x ← y přiřadí do proměnné x text “y” . |
Přiřazovací příkaz x ← y přiřadí do proměnné x hodnotu proměnné y . |
Proměnné lze přirovnat třeba ke krabičkám, šuplíkům či obálkám, které mají uvnitř nějaký předmět (nebo třeba číslo napsané na papíře). Trochu přesněji odpovídají proměnným štítky nalepené na předmětech, nebo popsané kolíky držící předměty na prádelní šňůře. Takové metafory mohou přispět k základní intuici za proměnnými, je však potřeba vědět, že každá metafora má svoje omezení a neplatí dokonale.
Proměnné jako krabičky
Proměnná se často přirovnává ke krabičce, která je popsaná (jméno proměnné) a uvnitř má nějaký objekt (hodnota proměnné), třeba jablko. Můžeme se podívat, jaký objekt je uvnitř krabičky (zjištění hodnoty) a můžeme objekt v krabičce nahradit jiným, třeba hruškou (změna hodnoty). Tato metafora má však má svoje limity:
Do skutečné krabičky bychom nejspíš mohli přidat hrušku, aniž bychom z ní odebrali jablko. Proměnná si však pamatuje pouze poslední přiřazenou hodnotu. To by odpovídalo pravidlu, že kdykoliv do krabičky něco dáváme, nejprve ji vyprázdníme.
Ze skutečné krabičky bychom mohli objekt vzít a dát ho do jiné krabičky. To však neodpovídá chování přiřazovacího příkazu x ← y
, po kterém je původní hodnota proměnné y
v obou proměnných x
i y
. To by odpovídalo krabičkám vybaveným magickou kopírkou pro vytváření kopií objektů před jejich přiřazením či jiným použitím.
Proměnné jako nálepky
Proměnné si můžeme představit jako samolepící štítky (jméno proměnné) nalepené na objektu (hodnota proměnné). Přiřazovací příkaz x ← y
odpovídá přelepení nálepky x
na objekt označený nálepkou y
. Jeden objekt tak může mít více nálepek (jmen), zatímco jedna nálepka se vždy odkazuje na jediný objekt.