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:
Home Page , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

