Datové typy, proměnné, statická a dynamická typovost, deklarace, inicializace, reference, imutabilita, referenční a hodnotové, obor platnosti, přetypování


Základní pojmy

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"

Klasifikace programovacích jazyků

Kompilované vs interpretované jazyky

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 a moderní hybridy

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.

Příklad Babel, TypeScript

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í