Программирование – непростая дисциплина. Теги и структуры данных, алгоритмы и программы – и все это пишется на каком-то языке. А на каком? Каждый язык имеет свои характеристики, одна из них – типизация.
Под типизацией в программировании понимается то, как язык распознает переменные. Она определяет, нужно ли машине указывать, как воспринимать тот или иной тег, и язык сам поймет, что нужно делать и как выполнять те или иные указания.
Как понимать тип
Каждая переменная, независимо от языка, – это источник информации, а тип переменной определяет, какая информация может быть записана в ней: что или как с ней можно делать.
Виды типизации
Все языки делятся на типы по четырем признакам:
- есть ли вообще типизация или язык бестиповый;
- статистическая она или динамическая;
- сильная или слабая;
- явная или неявная.
Пойдемте посмотрим в чем отличия каждого и какие преимущества дает та или иная типизация.
Сначала о бестиповой типизации
Даже если нет типа, язык имеет бестиповую типизацию. Сложно? Сейчас разберемся.
Бестиповая типизация характерна для низкоуровневых или эзотерических языков. Например, Fort или Brainfuck. Главная особенность таких языков – в них все сущности выражаются в последовательности бит с разной длиной.
Преимущества использования бестиповых языков:
- повышенная эффективность кода, при условии, что все сделано правильно;
- прозрачность. При должном знании языка новый разработчик быстро разберется, что к чему, и зачем нужен этот или тот кусок кода.
Недостатки:
- слабая абстракция. Это отягчает работу со сложными типами данных.
Статическая и динамическая типизация
Их основное различие – способ проверки типов. В статически типизированных языках проверка выполняется при компиляции, а при динамической типизации – когда программа выполняется.
Преимущества статической типизации :
- проверки выполняются один раз. Если ошибки есть, вы о них узнаете сразу на этапе компиляции;
- скорость выполнения. Языки со статистической типизацией работают быстрее;
- при поддержке интегрированной среды разработки – сроки разработки сокращаются.
Плюсы динамической типизации:
- удобно описывать алгоритмы обобщенного типа. Например, легко писать сортировку массивов, она может работать с разными типами данных;
- легкое освоение. Динамические языки проще учить.
В некоторых статических языках можно использовать динамику:
- C# – есть псевдотип dynamic;
- Delphi – использует динамику посредством variant;
- F# – может имитировать динамическую типизацию через оператора «?».
Примерно так же в динамически типизированных языках можно работать со статикой. Это позволяют делать Common Lisp и Perl.
О слабой и сильной типизации
Языки с сильной типизацией заставляют программиста отказаться от смешивания разных сущностей в одном выражении, а со слабой – наоборот способствуют таким действиям.
Преимущества strong typing:
- скорость – исключаются скрытые преобразования, что позволяет ускорять отдельные участки кода, которые потенциально могут быть медленными;
- определенность – при ручных преобразованиях, точно ясно, что и во что вы преобразовываете, исключаются ошибки;
- надежность – при запуске вы получите либо ошибку компиляции, либо исключение действия, а не неправильный алгоритм.
Преимущества weak typing:
- краткие записи;
- удобство работы со смешанными выражениями;
- можно не следить за типизацией, а сосредоточиться на решении задачи.
Явная и неявная типизация
При неявной типизации тип данных определяется сам, когда вы записываете информацию в переменную. Явная типизация требует указания типов. В некоторых языках с неявной типизацией есть возможность указания типа значений. Например, Haskell.
P.S. Лучше и проще всего заходить в программирование с языка Python. Он востребованный, учит дисциплине и не очень сложный – так говорят опытные программисты.