дарте так туго приводятся друг к другу?
я, например, с C# привык, что можно неявно закастить double в int и наоборот, а в dart такого сделать не получится.
так следующий код выдает ошибку невозможности приведения типа int к double:
num i = 0; // runtime type is int not a num
double d = i; // compilation error
double d1 = i as double; // runtime error
Ответ простой... и ПРАВИЛЬНО! Чтобы понимать что где и откуда и ты понимаешь. Хочется казачьей вольницы, можно сходить в ДжаваСкрипт, а потом на собесах 50% вопросов, а что делает этот код? и откуда после сложения и строки такая вот лютая дичь :) Типизация это гут!
1 + 5 = 15 это база
это не ответ почему. может и правильно, но я не могу те же дженерики написать по типу: abstract class Foo<T extends num> { T? nullOrT(); T foo() { var value = nullOrT() ?? 0; return value as T; // int to double error } } приходится костыли писать в духе abstract class Foo<T extends num> { T get defaultValue; T? nullOrT(); T foo() { var value = nullOrT() ?? defaultValue; return value; } } class Bar extends Foo<double> { @override double get defaultValue => 0; @override double? nullOrT() { return null; } } class Baz extends Foo<int> { @override int get defaultValue => 0; @override int? nullOrT() { return null; } }
Просто не привычно, вы привыкли к шарпу просто.
не без этого
1. неявные касты зло, которое приводит к самым неявным проблемам 2. в примера ошибка из за nullOrT() ?? 0 - оно возвращает num из за принципа работы оператора "??"
1. я с таковыми значит еще не сталкивался 2. оно не возвращает num - runtimeType в примере int
num - это интерфейс, который имплементят и int, и double. Ты интовый литерал присваиваешь в num.
я некорректно выразится, анализатор считает что value будет удовлетворять только num т.к. резольвит тип на месте, а каст num -> T считается апкастом поэтому не производится автоматически
https://dart.dev/guides/language/numbers лучше прочитать, вы можете спокойно конвертировать int в double
В Dart тоже самое как в С#. Тот же c# ругается если присвоишь int`у double. Он неявно преобразовывает int в double, так как в C# есть перегрузка операторов преобразования.
В каком это таком шарпе можно неявно дабл к инту привести? Даже явно по большей части в исключение упадет не задумываясь.
действительно, my bad
Обсуждают сегодня