Что такое динамическая и статическая типизация? В чем их отличия?

Ответ

Типизация определяет, когда и как проверяются типы переменных в языке программирования. Основное различие заключается во времени проверки: на этапе компиляции или во время выполнения.

Статическая типизация (как в Go)

Тип каждой переменной известен на этапе компиляции. Компилятор проверяет совместимость типов во всех операциях. Это позволяет отлавливать многие ошибки до запуска программы.

  • Плюсы: Надежность, ранняя диагностика ошибок, высокая производительность (нет нужды в проверках типов в runtime).
  • Минусы: Меньшая гибкость, более многословный код.
// a имеет тип int, и это нельзя изменить
var a int = 10

// Ошибка компиляции: cannot use "text" (type string) as type int in assignment
a = "text"

Динамическая типизация (как в Python, JavaScript)

Тип переменной определяется в момент присваивания значения, то есть во время выполнения программы (runtime). Переменная может менять свой тип в процессе работы.

  • Плюсы: Гибкость, скорость разработки, менее многословный код.
  • Минусы: Ошибки типов проявляются только при выполнении, что усложняет отладку; потенциально ниже производительность.
# x сначала целое число
x = 10

# теперь x - строка, и это нормально
x = "text"