====== Dynamické typování ====== **Dynamické typování** (Dynamic Typing) je vlastnost programovacího jazyka, při které jsou datové typy proměnných kontrolovány a přiřazovány **až během běhu programu (runtime)**, a nikoliv předem při kompilaci. V dynamicky typovaném jazyce proměnná sama o sobě nemá pevně daný typ – typ nese aktuální hodnota, kterou je proměnná právě naplněna. ---- ===== Jak dynamické typování funguje? ===== V praxi to znamená, že do jedné proměnné můžete v průběhu běhu programu uložit nejdříve celé číslo, pak textový řetězec a nakonec třeba pole, aniž byste museli typ explicitně deklarovat. # Příklad v Pythonu cislo = 42 # Proměnná je nyní typu integer cislo = "Ahoj světa" # Změna hodnoty na řetězec (string) projde bez chyby ^ Vlastnost ^ Dynamické typování ^ Statické typování ^ | **Určení typu** | Za běhu programu (runtime) podle přiřazené hodnoty. | Předem při kompilaci (explicitní deklarace). | | **Flexibilita** | Vysoká, proměnné mohou měnit svůj typ za chodu. | Nízká, typ proměnné je pevně dán a neměnný. | | **Odhalení chyb** | Až při spuštění programu (když nastane neplatná operace). | Již při psaní kódu nebo během kompilace. | ---- ===== Výhody a nevýhody dynamického typování ===== * **Výhody:** * **Rychlejší vývoj a menší množství kódu:** Nemusíte složitě definovat datové struktury a typy předem, což zrychluje prototypování. * **Větší flexibilita:** Snadnější manipulace s daty, která mění svou strukturu za běhu (např. JSON odpovědi z API). * **Nevýhody:** * **Pozdní odhalení chyb:** Chybu typu (např. sčítání textu a čísla) odhalí interpreter až ve chvíli, kdy k danému řádku kódu za běhu skutečně dojde. * **Horší nástroje (Tooling):** Vývojová prostředí (IDE) mají horší možnost našeptávání kódu (autocomplete) a refaktoringu, protože přesně nevědí, jaký typ bude v proměnné uložen. ---- ===== Kde se dynamické typování používá? ===== Dynamické typování je typické pro skriptovací jazyky a technologie často používané ve webovém vývoji a analýze dat: ^ Jazyk ^ Popis ^ | **Python** | Univerzální jazyk, kde proměnné vznikají prostým přiřazením hodnoty. | | **JavaScript** | Základní jazyk pro webové prohlížeče (dynamický, slabě typovaný). | | **PHP** | Serverový jazyk pro tvorbu webových stránek a redakčních systémů. | | **Ruby** | Objektově orientovaný jazyk známý svou flexibilitou. | ---- > **Tip:** Pojem „dynamické typování“ se často zaměňuje se „slabým typováním“ (Weak Typing). Ačkoliv spolu úzce souvisí, dynamické určuje //kdy// se typ kontroluje (za běhu), zatímco slabé určuje, jak moc je jazyk přísný při automatickém převodu typů (např. sčítání čísla a textu).