Комментарии 4
В Intellij IDEA тоже есть поддержка Dart.
+3
Google выбрал простоту в ущерб функциональности, с рассчетом на очень средний уровень разработчиков. Язык не соответствует современным тенденциям и концептуально не продуман. Многие вещи реализованы откровенно плохо. Другие же были копипейстнуты с Java, даже не меняя букв. Что плохо:
— функциональный тип без сигнатуры функции (только опционально через typedef)
— generics без ковариантности/контравариантности
— отсутствует защита видимости public/private
— отсутвтвует nullable/non-nullable types (+50% ошибок)
— спорная концепция constructor initializers и абсолютно лишние factory constructors
— интерфейсы вместо трейтов
— наследование без проверки на override (фу!)
Такой язык был бы популярным лет 12 назад. Ремейк «Java for Web developer».
— функциональный тип без сигнатуры функции (только опционально через typedef)
— generics без ковариантности/контравариантности
— отсутствует защита видимости public/private
— отсутвтвует nullable/non-nullable types (+50% ошибок)
— спорная концепция constructor initializers и абсолютно лишние factory constructors
— интерфейсы вместо трейтов
— наследование без проверки на override (фу!)
Такой язык был бы популярным лет 12 назад. Ремейк «Java for Web developer».
+1
Парсер тоже так и не поправили:
По прежнему возможно писать такой код:
Транслятор даже не ругнется если явно не выставить --enable_type_checks .
Ну и соответственно как вы понимаете это тоже прокатит:
А насчет инструкции for-in, то они забыли добавить метод .items():
Иными словами если нужно получить и ключ и значение, то нужно использовать .forEach(), при этом есть определенные ограничения на использование инструкций в теле метода, которые можно обойти допустим так:
Ну и еще пара десятков подобных казусов…
По прежнему возможно писать такой код:
main() {
SOMETYPE one = 1;
String two = 1;
print('Hi ' + one + two); //Hi 12
}
Транслятор даже не ругнется если явно не выставить --enable_type_checks .
Ну и соответственно как вы понимаете это тоже прокатит:
main() {
Map<String, String> map = {'foo': 1};
print(map["foo"]); //1
}
А насчет инструкции for-in, то они забыли добавить метод .items():
main() {
var map = {
'a': 1,
'b': 2
};
for (final i in map.getKeys())
print(i); // a, b
for (final i in map.getValues())
print(i); // 1, 2
}
Иными словами если нужно получить и ключ и значение, то нужно использовать .forEach(), при этом есть определенные ограничения на использование инструкций в теле метода, которые можно обойти допустим так:
main() {
var map = {
'a': 1,
'b': 2
};
var result = 0;
void predicate(String key, int value) {
if (value == 1)
result = 1;
else
result = 2;
};
map.forEach((key, value) => predicate);
print(result); //1
}
Ну и еще пара десятков подобных казусов…
+2
абсолютно лишние factory constructors
Если я вас правильно понял, то это реализовано:
class Symbol {
final String name;
static Map<String, Symbol> _cache;
factory Symbol(String name) {
if (_cache == null)
_cache = {};
if (_cache.containsKey(name)
return _cache[name];
else {
final symbol = new Symbol._internal(name);
_cache[name] = symbol;
return symbol;
}
}
Symbol._internal(this.name);
}
main() {
var a = new Symbol('something');
print(a.name); //something
}
отсутствует защита видимости public/private
Чтобы член класса стал имел статус private, нужно добавить префикс _
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Официальный мануал по Dart и обновлённый Dart Editor