Datové typy, proměnné, statická a dynamická typovost, deklarace, inicializace, reference, imutabilita, referenční a hodnotové, obor platnosti, přetypování
Proměnná je pojmenované místo v paměti počítače, do kterého lze uložit hodnotu. Skrz název se k té hodnotě dostaneš a můžeš ji měnit (pokud to typ a jazyk dovolí).
Datový typ definuje, jaký druh dat lze do proměnné uložit (celé číslo, text, objekt...), jakou velikost v paměti zabere a jaké operace s ní jsou povolené.
int vek = 18; // typ: int, název: vek, hodnota: 18
string jmeno = "axo"; // typ: string, název: jmeno, hodnota: "axo"
| Kompilované | Interpretované | |
|---|---|---|
| Co se stane | Kód se přeloží do strojového kódu před spuštěním | Kód se čte řádek po řádku za běhu |
| Rychlost běhu | Rychlé (nativní instrukce CPU) | Pomalejší (interpret stojí mezi) |
| Doba "buildu" | Pomalá první kompilace | Žádná, spustíš a běží |
| Chyby | Mnohé chytne kompilátor předem | Často až za běhu |
| Příklady | C, C++, Rust, Go | Python, PHP, JavaScript |
| Hybrid | C#, Java (JIT kompilace v JVM/CLR) |
JIT (Just-In-Time) kompilace je mezistupeň: kód se kompiluje za běhu do strojového kódu (s cachováním). Používají JVM (Java), CLR (.NET). Výsledek: skoro rychlost kompilovaného jazyka s pohodlím interpretovaného.
V8 (JavaScript) je taky JIT compiler. Ale byl bych HODNĚ opatrnej tohle vůbec zmiňovat.
V JavaScript ekosystému je situace zajímavá:
// TypeScript (statické typování, transpiluje se na JS)
let vek: number = 18;
vek = "axo"; // ❌ chyba při kompilaci
// Po transpilaci (čistý JS, dynamicky typovaný)
let vek = 18;
vek = "axo"; // ✓ JS to dovolí