#flutter #dart #casting #type-systems
#флаттер #дротик #Кастинг #тип-системы
Вопрос:
Каковы последствия использования int
were a double
требуется? dart позволяет вам объявлять double без .0
if оно равно 0 и обрабатывать его как double без какого-либо приведения во время выполнения?
Думает, что это заставляет меня беспокоиться об этом:
- Я не вижу ни одного линтера, говорящего, что это приведет к
int
превращениюdouble
в. - Он отлично компилируется.
height
Поле является двойным, но оно принимаетint
.
Взгляните на примеры:
версия int
SizedBox(height: 10)
# Or
final double a = 2;
двойная версия
SizedBox(height: 10.0)
# Or
final double a = 2.0;
Ответ №1:
Если вы посмотрите на реализацию SizedBox, вы увидите, что высота поля имеет тип double .
Чтобы понять, что происходит в вашем коде, который у вас есть в качестве примера, вы должны понимать, как работает вывод типов. В первом приведенном вами примере кода (int version), даже если вы написали 10, а не 10.0, компилятор Dart выводит это значение как double, потому что высота файла имеет этот тип. Вы явно не указываете, что значение, которое вы указываете в качестве параметра, равно int, поэтому оно рассматривается как double . Если вы зададите в качестве значения целое число (вы укажете тип int), у вас будет следующая ошибка времени компиляции:
Итак, в заключение, в обоих ваших примерах Dart выводит тип как double, потому что вы явно не указываете, что это целое число.
Вы можете прочитать больше о выводе типа дротика здесь: https://dart.dev/guides/language/type-system#type-inference
Ответ №2:
Автоматическое преобразование времени выполнения между int
и отсутствует double
. double a = 2;
это просто синтаксический сахар double a = 2.0;
, который происходит во время компиляции, и именно поэтому он работает только для целочисленных литералов.