Что такое типизация в программировании
Объясняем, что это такое, какая бывает типизация и на что она влияет.
vlada_maestro / shutterstock
Если вы читали что-то о языках программирования, то наверняка не раз наткнулись на упоминание типизации. Что это такое и что об этом нужно знать, когда выбираешь язык программирования?
Типизация — это то, как язык распознаёт типы переменных. Типизация определяет, нужно ли вам писать тип, или язык «поймёт» его сам, и насколько свободно можно с типами работать: например, можно ли их менять.
А что такое типы?
В переменную можно записывать информацию, а тип переменной описывает, какая именно информация записана в переменной и что с ней можно делать.
Вот частые типы:
- integer — целое число;
- flow — число с десятичной частью;
- string — строка текста;
- bool — правда/неправда.
Типы бывают разные и немного различаются в разных языках.
Зачем нужно знать о типизации?
От типизации зависит, как вам работается с языком, как он себя ведёт. Если вы знаете, какие выгоды или проблемы приносят разные виды типизации, вам легче будет выбрать язык.
Какая бывает типизация?
Слабая и сильная
Если у языка сильная типизация (её ещё называют строгой), это значит, что он требует, чтобы разработчики строго следовали правилам работы с типами: если вы обозначили что-то как целое число, будьте добры с ним работать как с целым числом.
Языки со слабой типизацией «добрее»: если вы решите прибавить число к тексту, они не будут ругаться, а попробуют сделать то, что вы просите. Правда, результат может быть не совсем таким, как вы планировали.
Пример
В JavaScript, языке со слабой типизацией, можно сложить строку с числом, например вот так:
И получить строку «21».
А в Java так сделать нельзя: появится ошибка.
Статическая и динамическая
Статическая типизация значит, что типы определяются на этапе компиляции. То есть ошибки в типах будут видны ещё до того, как программа запустится.
В языках с динамической типизацией типы определяются во время выполнения программы.
Так, в динамически типизированном языке у одной и той же переменной могут быть разные типы в разных частях программы, а в статически типизированном, если вы задали переменной тип string, у неё будет только тип string.
Например, в Python (динамическая типизация) можно сделать вот так:
а потом так:
И язык не будет возражать. В Java (статическая типизация) так сделать нельзя.
Явная и неявная
Ещё типизацию делят на явную и неявную. Когда типизация неявная, тип определяется сам в момент, когда вы записываете в переменную информацию.
Например, если в Python написать так:
Он прочитает, что вы записали в переменную b целое число, и определит b как integer (int).
Явная типизация значит, что тип переменной написан. Например, в С переменная записывается вот так:
Само по себе разделение типизации на явную и неявную не столь важно: в статически типизированных языках она почти всегда явная, а в динамически — неявная.
Как типизация влияет на работу с языком?
- Сильная типизация немного ограничивает полёт фантазии, зато она более предсказуема. Слабая типизация даёт больше свободы, но с ней надо быть более внимательным. Впрочем, с опытом становится ясно, как себя ведёт конкретный язык, а избежать неприятных сюрпризов уже легче.
- Статическая типизация добавляет мороки при написании кода: многое нужно прописывать вручную. Динамическая даёт вам большую простоту написания и лучшую читаемость кода.
- Программа, написанная на языке со статической типизацией, обычно работает быстрее, чем программа на языке с динамической. В последнем случае типы проверяются в процессе, а это замедляет работу.
Важно учитывать, что типизация — далеко не единственный фактор, который влияет на скорость. Нельзя сказать, что все языки со статической типизацией быстрее языков с динамической.
В каких языках какая типизация
Напоследок — типизации некоторых популярных языков:
- Java — строгая статическая.
- C# — строгая статическая.
- С — слабая статическая.
- Python — строгая динамическая.
- PHP — слабая динамическая.
- JavaScript — слабая динамическая.