Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
int64
или simd
тип… JS нативно такого не поддерживает, как результат нужно сидеть и ждать пока TC-39 пропихнет такие типы в стандарт JS и пока их правильно и оптимально поддержат во всех реализациях.""+a
выглядит весьма сюрреалистично. И что же оказалось, как на ладони?
Balloon
понимаешь ли «расширяет IDomEventEmitter
». А если кликнуть на это, то дальше узнаем, что IDomEventEmitter он-то «расширяет IEventEmitter. интерфейс объекта, генерирующего „DOM-события“». т.е. вроде как классовоподобных фрейморков нет, а терминология имеется. Тут вам и конкретные объекты, и интерфейсы нарисовались, при том, что в самом-то JS никаких интерфейсов нет.а потому, что он в чистом виде представляет собой попытку Гугла пересадить весь веб на его (Гугла) стек веб-технологий.
Дарт не блещет ни особой понятностью, ни удобством разработки.
var DerivedClass = function () {
if (condition) {
BaseClass1.call(this);
} else {
BaseClass2.call(this);
};
Что, Dart прост и очевиден для начинающих? Ха-ха три раза. Я смотрю на вот этот туториал:
class Greeter implements Comparable { String prefix = 'Hello,'; Greeter() {} Greeter.withPrefix(this.prefix); greet(String name) => print('$prefix $name'); int compareTo(Greeter other) => prefix.compareTo(other.prefix); }
И он не производит впечатления простоты и понятности.
Я не вижу преимуществ в том, чтобы каждая вторая библиотека изобретала свою собственную несовместимую эмуляцию одной и той же парадигмы под названием ОО.Ну а я как разработчик проекта на несколько миллионов строк вижу очень много преимуществ в мультипарадигменности JS.
y.inherit
.Попробуйте вот такой фокус на Дарт провернуть:
class DerivedClass {
factory DerivedClass () {
return condition ? new _DerivedClass1() : _DerivedClass2();
}
}
class DerivedClassImpl { }
class _DerivedClass1 extends BaseClass1 with DerivedClassImpl
implements DerivedClass { }
class _DerivedClass2 extends BaseClass2 with DerivedClassImpl
implements DerivedClass { }
// new DerivedClass
class DerivedClass {
final base;
DerivedClass() : base = condition ? new BaseClass1() : new BaseClass2();
noSuchMethod(invocation) => reflect(base).delegate(invocation);
}
Я смотрю на вот этот туториал:
class Greeter {
var prefix;
Greeter(prefix) { this.prefix = prefix; }
greet(name) {
print('$prefix $name');
}
}
function Greeter(prefix) { this.prefix = prefix; }
Greeter.prototype.greet = function (name) { console.log(this.prefix + ' ' + name); };
лучше смотреть на TypeScript, который предлагает те же самые преимущества и нацелен на развитие JavaScript в web до ES6
Извините, не понял. Система классов появляется, о каких типах вы говорите?
TypeScript adds optional static types to JavaScript. Types are used to place static constraints on program entities such as functions, variables, and properties so that compilers and development tools can offer better verification and assistance during software development.
Что вы имеете в виду, можно пример, а то я не понимаю.
null
, а в JS их два null
и undefined
. Если я попробую обратится к полю, которого нет я получу исключение, а не undefined
. Если я попробую прочитать за границей массива, я опять же получу исключение, а не undefined
. Если я умножу null
на 10
, я не получу в тихую NaN
, а опять же получу исключение. синтаксис Dart мне кажется в некоторых моментах — анархичным
A(this.x);
это совсем уж архаично. которые друг-друга дублируют
Что как раз очень правильно в плане обучаемости программистов
Но в TS в этих случаях транслятор выбрасывает предупреждение
nullв какую-то функцию? Я уж не говорю о том, что вы можете забыть что-то типизировать и тогда у вас там будет
Any
, про который транслятор ничего не знает.Почему идентификатор экземпляра фигурирует в интерфейсе класса
A(x) { this.x = x; }
иначе конструкторы будут много boilerplate кода содержать, который будет только и делать, что копировать параметры в поля.Т.е. он не создан, что бы быть заменой JS?
так мне не попадался сколь-нибудь серьёзный проект, где прототипная модель использовалась бы иначе, чем для создания классоподобной системы. Ну и зачем тогда, спрашивается, вообще нужны эти прототипы?
{x: 10, y: 20}
или объект Point(x: 10, y: 20), а может позволить функции обрабатывать и то и другое? Писать на каждый такой чих юнит-тест, который проверяет такие базовые вещи? И постоянно испытывать дискомфорт от того, что где-то забыл вставить проверку на приходящий параметр в функцию.Динамически типизируемые языки — для тех, кто не испытывает дискомфорт от отсутствия явных указаний типов.
т.к. все проверки он выполняет в compile-time
class Point {
var x, y;
Point(this.x, this.y);
}
class Doge { }
bar(Point p) => p.x * p.x + p.y * p.y;
baz() => bar(new Point(1,2)) / bar(new Doge());
Doge
это совсем не Point
, но развалится-то он все-равно во время исполнения при попытке взять x
с объекта типа Doge
T x; x = y;
фактически превращается в T x; assert(y == null || y is T); x = y;
, т.е. в примере выше при попытке вызвать bar(new Doge())
случится исключение, говорящее что Doge
нельзя присваивать в переменную типа Point
. Но оно случится во время исполнения, а не во время компиляции.вот тут описано
If you run a program in checked mode, the system will automatically execute certain type checks when passing in parameters, when returning results, and when executing assignments. If the checks fail, execution will stop at that point with a clear error message.
[...]
Essentially, checked mode is like running your program under the debugger with watchpoints that run a subtype check on every assignment, return, and so on.
... as {type}
? dart:io
(к сожалению, по моему мнению) весь из себя такой-же асинхронный как и браузерный код, и node.js. Причем dart:io
использует те же абстракции из библиотеки dart:async
, что и браузерный код.Flash тоже в свое время дышал в ту же шею (и куда ближе, надо сказать). Но не срослось.
Google выкатила замену Javascript — язык Dart