Динамическая типизация

Перейти к навигацииПерейти к поиску
Типизация данных

Динами́ческая типиза́ция — приём, используемый в языках программирования и языках спецификации, при котором переменная связывается с типом в момент присваивания значения, а не в момент объявления переменной. Таким образом, в различных участках программы одна и та же переменная может принимать значения разных типов. Примеры языков с динамической типизацией — Smalltalk, Python, Objective-C, Ruby, PHP, Perl, JavaScript, Лисп.

Динамическая типизация упрощает написание программ для работы с меняющимся окружением, при работе с данными переменных типов; при этом отсутствие информации о типе на этапе компиляции повышает вероятность ошибок в исполняемых модулях.

Также, динамическая типизация вредит производительности программ, так как отсутствие информации о типе не позволяет компилятору эффективно оптимизировать код. То же самое относится и к средам разработки, им становится сложнее анализировать то, как код будет исполняться, заранее предупреждать о возможных ошибках, производить автодополнение.

Производительность снижается и из-за необходимости проверять тип переменных во время операций, даже при обычном математическом сложении требуется проверить, что обе переменные хранят значение подходящего типа, затем получить само значение переменной через указатель на неё[1] и только потом производить необходимую операцию.

В некоторых языках со слабой динамической типизацией стоит проблема сравнения величин. Так, например, PHP имеет операции сравнения «==», «!=» и «===», «!==», где вторая пара операций сравнивает и значения, и типы переменных. Операция «===» даёт результат true только при полном совпадении, в отличие от «==», который считает верным такое выражение: (1=="1"). Однако эта проблема не динамической типизации в целом, а конкретных языков программирования.

Является ключевым средством для реализации динамических языков программирования. Противоположный приём — статическая типизация.

Примечания

  1. Хотя сам метод получения значения переменной может отличаться в разных языках программирования

Ссылки