В чем разница между статической и динамической типизацией в языках программирования?

«В чем разница между статической и динамической типизацией в языках программирования?» — вопрос из категории Swift Core, который задают на 22% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Пример статической типизации (Swift):

var number: Int = 42
number = "текст" // Ошибка компиляции: несовместимый тип

Пример динамической типизации (Python):

number = 42
number = "текст"  # Ошибки нет, тип изменен

Преимущества статической типизации:

  • Безопасность: Раннее обнаружение ошибок типа.
  • Производительность: Возможности оптимизации компилятором.
  • Поддержка IDE: Автодополнение и навигация по коду.

Преимущества динамической типизации:

  • Гибкость: Переменные могут менять тип.
  • Скорость разработки: Меньше шаблонного кода, быстрое прототипирование.

Swift использует статическую типизацию с выводом типов (type inference), что сокращает аннотации: let message = "Hello" (компилятор выводит String). Objective-C поддерживает динамическую типизацию через тип id.