169 похожих чатов

Не совсем по флаттеру вопрос, скорее по дарту. почему типы в

дарте так туго приводятся друг к другу?
я, например, с 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

13 ответов

24 просмотра

Ответ простой... и ПРАВИЛЬНО! Чтобы понимать что где и откуда и ты понимаешь. Хочется казачьей вольницы, можно сходить в ДжаваСкрипт, а потом на собесах 50% вопросов, а что делает этот код? и откуда после сложения и строки такая вот лютая дичь :) Типизация это гут!

Maxim-🍓 Автор вопроса
Aleksei Kiselev
Ответ простой... и ПРАВИЛЬНО! Чтобы понимать что г...

это не ответ почему. может и правильно, но я не могу те же дженерики написать по типу: 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; } }

Просто не привычно, вы привыкли к шарпу просто.

Maxim 🍓
это не ответ почему. может и правильно, но я не м...

1. неявные касты зло, которое приводит к самым неявным проблемам 2. в примера ошибка из за nullOrT() ?? 0 - оно возвращает num из за принципа работы оператора "??"

Maxim-🍓 Автор вопроса
Royal Cat
1. неявные касты зло, которое приводит к самым нея...

1. я с таковыми значит еще не сталкивался 2. оно не возвращает num - runtimeType в примере int

num - это интерфейс, который имплементят и int, и double. Ты интовый литерал присваиваешь в num.

Maxim 🍓
1. я с таковыми значит еще не сталкивался 2. оно н...

я некорректно выразится, анализатор считает что value будет удовлетворять только num т.к. резольвит тип на месте, а каст num -> T считается апкастом поэтому не производится автоматически

Maxim 🍓
1. я с таковыми значит еще не сталкивался 2. оно н...

https://dart.dev/guides/language/numbers лучше прочитать, вы можете спокойно конвертировать int в double

В Dart тоже самое как в С#. Тот же c# ругается если присвоишь int`у double. Он неявно преобразовывает int в double, так как в C# есть перегрузка операторов преобразования.

В каком это таком шарпе можно неявно дабл к инту привести? Даже явно по большей части в исключение упадет не задумываясь.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта