Отключение статичной типизации с `dynamic`
dartТип dynamic
— это статический тип, который игнорирует статическую типизацию.
Он позволяет выполнять любые операции без проверок на этапе компиляции, но ошибки возможны в рантайме.
В том числе, компилятор будет не против присвоения null
такой переменной,
а значит использование dynamic
выбивается из концепции sound null safety.
void main() {
// answer может быть чем угодно
dynamic answer = 42;
answer = 'text';
answer = null;
// Также предполагается, что у него может оказаться любой метод
answer.getAnswer();
}
Тип dynamic
самый небезопасный из всех.
Его применение должно быть обоснованным.
На практике чаще всего c ним работают при парсинге JSON,
так как сам JSON не типизирован.
Вместо dynamic
, как универсальный тип для всего, лучше использовать Object
или Object?
, но только если такая универсальность действительно нужна. Ещё лучше использовать максимально узкие типы или дженерики.
dynamic это тип?
Как доказать, что dynamic это тип, а не ключевое слово? Проверить через is
.
void main() {
// Мы смогли присвоить dynamic в переменную с типом type
Type foo = dynamic;
}