Языки со статической и динамической типизацией — это концепции, с которыми мы сталкиваемся при изучении нового языка программирования. Мы можем задаться вопросом «что это?», но на самом деле смысл довольно прост.

Переменные — это просто блоки, у каждого из которых есть имя и некоторые содержащиеся в нем данные. Затем мы можем обращаться к данным, используя имя. Но данные могут быть любыми! Это могут быть строки или числа, числа с плавающей запятой или многое другое.

Статическая типизация

Java является примером языка со статической типизацией. Это означает, что при определении новой переменной мы должны указать тип данных, которые эта переменная будет содержать. Например:

int x = 5;
String my_string = "Hello, world!";

Динамическая типизация

Python — это пример языка с динамическими типами, что означает, что нам не нужно указывать тип данных переменной при ее определении; это следует из данных, которые мы помещаем в поле. Например:

x = 5;  # type 'int' assumed
my_string = "hello, world!"  # type 'string' assumed

Проблемы

Одна из проблем языка с динамической типизацией заключается в том, что, например, легко передать методу неверный тип. Скажем, у нас есть следующий метод в Python:

def date_formatter(date):
    return datetime.datetime.strptime(date, "%m%d%Y").strftime("%d-%m-%Y")

Через несколько недель мы пишем код в другой части программы и вызываем наш метод так:

date_formatter(datetime.datetime.utcnow())

Python ожидал, что строка будет разобрана, а затем отформатирована по-другому, и мы дали ей объект datetime.

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

Так какой из них лучше?

Нет лучшего. Некоторые люди предпочитают одно другому, но оба имеют свое место, и все будет зависеть от того, где вы его используете, и от того, привыкли ли вы использовать язык с такой типизацией.

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

Другие скажут, что языки с динамической типизацией лучше, потому что они экономят время и дают больше свободы.