Сегодня немного о типизации. После чтения статей на хабре мне начало казаться, что главное в заметке по программированию - это привязать объяснения к каким-нибудь милым животным. Поэтому в этой заметке будут еноты. Поскольку сейчас пишу на Python, то основные примеры будут разобраны на нем.
У типизации может быть 3 практически не зависящих друг от друга характеристики:
- типизация может быть статической или динамической (В Python - динамическая). При динамической типизации тип переменной определяется уже в момент выполнения программы. При статической это происходит заранее.
- типизация может быть сильной или слабой (в Python - сильная). При сильной типизации запрещены неявные преобразования. Пример: в Python нельзя просто так взять и сложить int и list. Нет четкого понимания: будет ли этот элемент добавлен к списку или к каждому элементу списка, а может найдется еще несколько вариантов. В языках со слабой типизацией такая операция была бы возможна, но для точного понимания результата нужно дополнительно штудировать документацию.
- типизация может быть явной и неявной (в Python - неявная). При явной типизации программисту необходимо обозначать типы новых переменных/функций и т.д. При неявной их определяет сам компилятор/интерпретатор.
Таким образом, собирая все в кучку, в Python мы получаем динамическую сильную неявную типизацию.
У каждой из характеристик есть свои плюсы и минусы, так динамическая типизация в целом позволяет писать более компактный и читаемый код, но жрет большее количество ресурсов при обработке. Для того, чтобы сочетать плюсы статичной и динамичной типизации в некоторых статических языках применяют обобщенное программирование. Его методы позволяют описывать не каждый конкретный источник данных, а подготавливать шаблоны по которым программа будет их опознавать.
На сегодня на этом все, до новых встреч.