Typowanie dynamiczne to nadawanie typów zmiennym w sposób dynamiczny, czyli wynikający z typu bieżącej wartości zmiennej. Jest to cecha niektórych języków programowania.
Przy zastosowaniu typowania dynamicznego, zmienne nie posiadają typów przypisanych statycznie ("na sztywno"). W takiej sytuacji typ zmiennej wynika z wartości jaką dana zmienna przechowuje. Ułatwia to znakomicie operacje na zmiennych, utrudnia natomiast kontrolę integralności programu. W razie wykonania podejrzanej operacji - na przykład kiedy do zmiennej zawierającej łańcuch "ala" przypiszemy liczbę 5 - kompilator o typowaniu statycznym zwróci błąd w kodzie. Program w języku zezwalającym na typowanie dynamiczne może zachować się dwojako:
Ciekawą konsekwencją typowania dynamicznego (w przypadku języków bez bezpiecznego typowania) jest także to, że wartość zmiennej przed wykonaniem operacji jest dopasowywana do danej operacji. Jeśli (podobnie jak w poprzednim przykładzie) do zmiennej zawierającej łańcuch "ala" dodamy liczbę "5", to program najpierw dopasuje wartość "ala" do operacji artymetycznej (wartość 0), następnie do "0" doda "5" i otrzymaną w ten sposób wartość "5", już jako wartość liczbową przypisze z powrotem do tej zmiennej.
Zachowanie to może zilustrować następujący fragment kodu w języku PHP:
<?php $a = "4"; // przypisujemy zmiennej $a wartość łańcuchową "4" $a = $a+7; // dodajemy (arytmetycznie) liczbę 7 echo $a; // program wypisuje "11" // oznacza to, że program najpierw sprowadził zmienną $a // do postaci liczbowej (4) i dopiero do niej dodał 7 echo "\n"; echo strlen($a); // nie zmieniając samej zmiennej (zawiera ona nadal wartość liczbową), // wykonujemy operację charakterystyczną dla łańcucha znakowego // (funkcja strlen() podaje długość takiego łańcucha) // program wypisuje "2" // oznacza to, że program najpierw zamienił wewnętrznie zmienną $a // na łańcuch znakowy "11" i podał jego długość echo "\n"; ?>
Do języków stosujących typowanie dynamiczne należą między innymi: