Dynamiczne typowanie
Z Wikipedii
Dynamiczne typowanie, to inaczej dynamiczne nadawanie typów zmiennym. Jest co cecha niektórych języków programowania.
Przy zastosowaniu dynamicznego typowania, zmienne nie mają przypisanych do siebie na sztywno typów. 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 - np. do zmiennej zawierającej łańcuch "ala" przypiszemy liczbę 5 - kompilator o sztywnym typowaniu niechybnie 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 bezpiecznego typowania (type-safe), np. PHP, po prostu zmieni typ zmiennej z łańcuchowego na liczbowy i przypisze jej nową wartość
- w przypadku języków stosujących bezpieczne typowanie, np. Ruby, wystąpi błąd w trybie runtime
Ciekawą konsekwencją dynamicznego (w przypadku języków bez bezpiecznego typowania) typowania jest także to, że wartość zmiennej, przed wykonaniem operacji jest dopasowywana do danej operacji. Czyli jeśli (podobnie jak w poprzednim przykładzie) np. dodamy do zmiennej zawierającej łańcuch "ala" liczbę "5", to program najpierw dopasuje wartość "ala" do operacji artymetycznej (wartość 0), a 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 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 dynamiczne typowanie należą między innymi: