Pri programovaní sa stretávaš s hodnotami, ktoré sa menia (napríklad skóre hráča), ale aj s hodnotami, ktoré zostávajú vždy rovnaké. Keď vieš, že nejaká hodnota sa nikdy nezmení, je dobré ju označiť ako konštantu.
Čo je konštanta?
Konštanta je pomenovaný priestor v pamäti, rovnako ako premenná, ale jej hodnota sa po prvom nastavení nemení. Príklady hodnôt, ktoré majú zmysel uložiť ako konštanty:
- Hodnota čísla pí (3.14159…)
- Maximálny počet životov v hre
- Cena DPH
- Rýchlosť svetla
Konštanty robia kód čitateľnejším a predchádzajú chybám: ak použiješ rovnaké číslo na desiatich miestach a neskôr ho potrebuješ zmeniť, stačí ho upraviť na jednom mieste — tam, kde je konštanta definovaná.
Konštanty v Pythone
Python nemá špeciálne kľúčové slovo pre konštanty (na rozdiel od jazykov ako Java alebo C#). Namiesto toho sa programátori dohodli na konvencii: názvy konštánt sa píšu VEĽKÝMI PÍSMENAMI s podčiarkovníkmi medzi slovami.
MAX_ZIVOTY = 3
PI = 3.14159
DPH = 0.20
NAZOV_HRY = "Vesmírna odysea"
Python sám nespomalí zmenu takejto hodnoty — je to len dohoda medzi programátormi. Ak vidíš názov premennej napísaný veľkými písmenami, vieš, že ju nemáš meniť.
V jazykoch ako Java alebo C# môžeš použiť kľúčové slovo final (Java) alebo const (C#, JavaScript), ktoré skutočne zabraňuje zmene hodnoty. Python sa spolieha na konvenciu.
Prečo používať konštanty?
Predstav si, že píšeš hru a na 20 rôznych miestach v kóde používaš číslo 3 ako maximálny počet životov. Čo sa stane, keď sa rozhodneš dať hráčovi 5 životov? Musel by si nájsť a zmeniť všetkých 20 výskytov čísla 3 — a ľahko na niektoré zabudnúť.
S konštantou stačí zmeniť jediný riadok:
# Stara verzia
MAX_ZIVOTY = 3
# Nova verzia — zmenime len tu
MAX_ZIVOTY = 5
Všetok ostatný kód, ktorý používa MAX_ZIVOTY, sa automaticky prispôsobí.
Konštanty verzus premenné
| Vlastnosť | Premenná | Konštanta |
|---|---|---|
| Hodnota sa môže meniť | Áno | Nie (konvencia) |
| Zápis v Pythone | malo_pismena | VELKE_PISMENA |
| Účel | Ukladanie meniacich sa dát | Pevné, nemenné hodnoty |
Keď sa rozhoduješ, či použiť premennú alebo konštantu, polož si otázku: "Zmení sa táto hodnota počas behu programu?" Ak nie, použi konštantu.
Príklad — jednoduchá hra
MAX_ZIVOTY = 3
NAZOV_HRACE = "Hráč 1"
zivoty = MAX_ZIVOTY # premenná, začína na hodnote konštanty
print(f"Vitaj, {NAZOV_HRACE}!")
print(f"Máš {zivoty} životov.")
# Hráč príde o jeden život
zivoty = zivoty - 1
print(f"Zostatok životov: {zivoty}")
Všimni si, že MAX_ZIVOTY sa nemení — slúži len ako referenčná hodnota. Premenná zivoty sa mení podľa toho, ako hra prebieha.
Nezabudni: Python ťa nezastaví, ak sa pokúsiš zmeniť konštantu. Je to len dohoda. Záleží na tebe, aby si ju dodržiaval.
Cvičné príklady
Prečo je lepšie písať MAX_ZIVOTY = 3 namiesto toho, aby si číslo 3 písal priamo na každom mieste v kóde?
Zobraziť odpoveď
Ktorý z nasledujúcich zápisov správne označuje konštantu podľa Pythonovej konvencie: maxSkore, MaxSkore, MAX_SKORE, max_skore?