Typowanie dynamiczne
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:
- w przypadku języków nie stosujących silnej kontroli typów (ang. type-safety) (na przykład w PHP) po prostu zmieni typ zmiennej z łańcuchowego na liczbowy i przypisze jej nową wartość ,
- w przypadku języków stosujących silną kontrolę typów (na przykład w Ruby) wystąpi błąd podczas uruchomienia (w trybie (ang.) runtime).
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: