Ivan Zavir
сентябрь 2018.
626

Объясните различие между статистической и динамической типизацией?

Ответить
Ответить
Комментировать
0
Подписаться
1
2 ответа
Поделиться

Все очень просто. Это как разница между гостиницей и частной квартирой. 

В квартире живут только те, кто там прописан. Если в ней, скажем, живет семья Сидоровых, то семья Пупкиных, хоть убей, жить там не сможет. При этом в этой квартире может жить Петя Сидоров, потом туда может переехать Гриша Сидоров (иногда они даже могут там жить одновременно - это массив). Это - статичная типизация.

В гостинице может жить одно время семья Сидоровых. Им даже там прописываться не всегда обязательно. Потом они от туда уедут, и туда переедут Пупкины. А потом Кузнецовы. А потом еще кто-нибудь. Это динамическая типизация.

Если вернуться в программирование, то первый случай (статическая типизация) встречается в, скажем, языках С, С++, С#, Java и других. Перед тем, как вы в первый раз присвоете переменной значение, вы должны рассказать, что вы там будете хранить: целые числа, числа с плавающей запятой, строки и тд (в этой квартире будут жить Сидоровы). Динамическая типизация, с другой стороны, подобного не требуют. В момент присваивании значения, вы одновременно присваиваете переменной ее тип (в этом гостиничном номере теперь живет Вася Пупкин из семьи Пупкиных). Подобное встречается в таких языках, как PHP, Python и JavaScript.

В обоих подходах есть свои преимущества и свои недостатки. Какой из них лучше или хуже зависит от решаемых задач. Подробней можно прочитать, скажем, в википедии.

3
0
Прокомментировать

при статической типизации ты точно знаешь тип переменной в момент написания программы и разработки алгоритма и учитываешь это. т.е. если ты сказал, что переменная G является четырёхбатовым беззнаковым целым, то в алгоритме она всегда будет именно четырёхбайтовым беззнаковым целым (если что, то нужно её явно преобразовывать или знать как транслятор её преобразовывает в определённом круге ситуаций, но в основном если будет несовпадение типов это является ошибкой алгоритма, и компилятор тебя как минимум предупредит), при статической ты никак не можешь положить в число строку "вася-дурак" и дополнительные проверки перед использованием переменной на то "а число ли там" - не требуются, всю корректность данных ты проводишь в момент их ввода в программу или по мере требований самого алгоритма.

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

на низком уровне динамическая типизация просто скрывает от программиста, что каждая его переменная, фактически, представляется структурой с полем "тип переменной" и поле "данные"(которые в том числе могут быть указателем на область памяти), и в момент работы под интерпретатором с данными переменных идёт постоянная обработка соответственно полю "тип"(которое в некоторых случаях само может меняться). проблемы тормозов снижают жид компиляция и прочие оптимизации, а также использование готовых библиотечных функций.

0
0
0
Ответить
Прокомментировать
Ответить
Читайте также на Яндекс.Кью
Читайте также на Яндекс.Кью