Очередной эксперимент. В этот раз я решил переписать весь JavaScript-код этого блога на новомодном Dart. И если результат я не выложу в итоге на рабочий сервер, это всё равно неплохая возможность взглянуть на новый язык. Почему именно Dart? Даже и не знаю. Мне подход с написанием языка с нуля нравится больше, чем попытки исправить недостатки JavaScript с помощью всяких надстроек, как в случае TypeScript или CoffeeScript. Я не говорю, что это плохие языки, просто они пытаются обойтись «малой кровью», а Google, создатель Dart, играет по крупному.
Итак, я обратил внимание на более лаконичный способ записи функций. Ну ведь правда, зачем писать каждый раз function
, если можно без этого обойтись.
var sum = (a, b) {
return a + b;
};
Или даже ещё короче:
var sum = (a, b) => a + b;
Но это мелочи. Гораздо интереснее исправленные области видимости. Например, переменная, объявленная внутри цикла for
, не видна вне его. Очень понравилось, как в Dart переделали всю структуру DOM-объектов. Например, у элементов свойство textContent
превратилось в text
, а childNodes
в nodes
. Наконец-то attributes
— это явный ассоциативный массив, а не NamedNodeMap
плюс набор методов вроде getAttribute
и setAttribute
. И classes
— это множество, а не строка. Красота!
События тоже претерпели сильные изменения. Нет больше element.onclick
и element.addEventListener
(attachEvent
в старых IE). Теперь события представляют собой потоки, на которые можно подписываться. Теперь нужно писать:
button.onClick.listen((event) {
// do something
});
А если нужно, чтобы обработчик сработал только один раз:
button.onClick.first.then((event) {
// do something
});
Свойство first
в примере выше является Future, что по сути то же, что и Promise. Я, кстати, не знаю, в чём разница между Futures и Promises, буду рад, если кто-нибудь объяснит.
Конечно, вся эта красота не приходит просто так. И если текущая сжатая версия скриптов для блога на языке Dart занимает 13 кб (по большей части из-за подключённой библиотеки интернационализации), то она же, но скомпилированная в JavaScript, все 134.
Текущая версия скриптов тут. Комментарии не возбраняются, а очень даже приветствуются.
Хочется что-то добавить или сказать? Я всегда рад обсудить. Пишите на me@dikmax.name.