PassFront
  1. PassFront
  2. База знаний
  3. Основы языка

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

Основы языка

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

Что это значит

Не нужно объявлять тип; переменная связывается с типом значения в рантайме и может его сменить:

let x = 42;      // number
x = 'строка';    // теперь string — ошибки нет
x = true;        // теперь boolean

Плюсы

  • Гибкость и скорость написания кода.
  • Меньше «церемоний», проще прототипировать.
  • Одна функция легко работает с разными типами.

Минусы

  • Ошибки типов всплывают в рантайме, а не при компиляции.
  • Меньше подсказок IDE и автодополнения.
  • Неявные приведения типов ('5' + 1 === '51') порождают баги.

Динамическая против статической

  • Динамическая (JavaScript, Python) — тип в рантайме, гибко, но рискованно.
  • Статическая (Java, TypeScript) — тип известен на этапе компиляции, ошибки ловятся раньше.

TypeScript добавляет статическую типизацию поверх JS, сохраняя его в рантайме динамическим.

Слабая типизация

JavaScript ещё и слабо типизирован — активно приводит типы (==, конкатенация). Это отдельное от динамичности свойство.

Коротко для собеседования

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

Другие вопросы раздела