Interested Article - Динамическая типизация
- 2021-09-13
- 2
Динами́ческая типиза́ция — приём, используемый в языках программирования и языках спецификации , при котором переменная связывается с типом в момент присваивания значения , а не в момент объявления переменной. Таким образом, в различных участках программы одна и та же переменная может принимать значения разных типов . Примеры языков с динамической типизацией — Smalltalk , Python , Objective-C , Ruby , PHP , Perl , JavaScript , Лисп .
Динамическая типизация упрощает написание программ для работы с меняющимся окружением, при работе с данными переменных типов; при этом отсутствие информации о типе на этапе компиляции повышает вероятность ошибок в исполняемых модулях.
Также, динамическая типизация вредит производительности программ, так как отсутствие информации о типе не позволяет компилятору эффективно оптимизировать код . То же самое относится и к средам разработки , им становится сложнее анализировать то, как код будет исполняться, заранее предупреждать о возможных ошибках , производить автодополнение .
Производительность снижается и из-за необходимости проверять тип переменных во время операций, даже при обычном математическом сложении требуется проверить, что обе переменные хранят значение подходящего типа, затем получить само значение переменной через указатель на неё и только потом производить необходимую операцию.
В некоторых языках со
слабой
динамической типизацией стоит проблема сравнения величин. Так, например,
PHP
имеет операции сравнения «
==
», «
!=
» и «
===
», «
!==
», где вторая пара операций сравнивает и значения, и типы переменных. Операция «===» даёт результат true только при полном совпадении, в отличие от «==», который считает верным такое выражение: (
1=="1"
). Однако эта проблема не динамической типизации в целом, а конкретных языков программирования.
Является ключевым средством для реализации динамических языков программирования . Противоположный приём — статическая типизация .
Примечания
- Хотя сам метод получения значения переменной может отличаться в разных языках программирования
Ссылки
- (англ.)
- 2021-09-13
- 2