Pull to refresh

Comments 39

Да, согласен — частично пересекается. Но:
1. Той статье больше года.
2. Я старался показать нововведения с точки зрения Java/C# программиста, та статья все-же для JS-программистов имхо.
Да, но разве вы исследуете какие-то новые API с момента прошлогодней публикации?
Объясните мне, в чём разница взгляда на спецификацию со стороны JavaScript-программиста и Java/C# программиста? Может стоит написать ещё несколько обзоров с точки зрения Python / Ruby / Haskell программистов?
Объясните мне, в чём разница взгляда на спецификацию со стороны JavaScript-программиста и Java/C# программиста?

Ок, поясняю. Java-программист, который на JS не писал ничего сложнее ajax-вызова через jQuery скорее всего плохо знаком с прототипным наследованием. Теперь этот человек может начать писать более сложную логику на JS, не выходя из своей зоны комфорта и используя привычные классы. Может я не сделал на этом акцент — тогда моя вина. Ну и как-бы в 2014 ES6 API уже можно начинать использовать. Не просто там рассуждать как хорошо будет, а брать и писать. Каким образом — я тоже пояснил.

Может стоит написать ещё несколько обзоров с точки зрения Python / Ruby / Haskell программистов?

Да, я вот почитал-бы взгляд на JS со стороны Haskell-прогера. Потому что в хаскелле совершенно другие конструкции и соответственно другие привычки у человека. Напишете?
Спасибо за развернутый ответ! Хоть вопрос и выглядит несколько саркастичным (за что я уже поплатился), он таковым не является. Мне правда интересно, как видят язык программисты из других областей, <имхо>но я всё же считаю излишним описывать каждую спецификацию со стороны программистов других областей (представьте, какой каламбур будет, если JS программисты будут описывать новые спецификации C++ и т.п.)</имхо>.

По поводу взгляд на JS со стороны Haskell-программиста: к сожалению, не напишу из-за слабого знания последнего. Однако, если вам интересно почитать про функциональное программирование на JS, то на хабре уже есть несколько статей на эту тему.

Есть у ECMA-6 и Java/C# что-то общее помимо классов (которые являются синтаксическим сахаром поверх прототипного наследования) и лямбд? Вы пишете про сравнение с точки зрения Java/C# программиста, а упоминание данных ЯП я вижу только в двух местах.

Хром, к примеру, не поддерживает большинство вещей из списка, если не включен флаг Enable Experimental JavaScript. Выход — использовать Traceur, компилятор из ES 6 в ES 5.

Ситуация за год не изменилась.
Ну и как-бы в 2014 ES6 API уже можно начинать использовать
Это мнение автора или чем-то обоснованная позиция? Так как если вы посмотрите на traceur и его дату создания, то он существовал ещё с 2011 года (хоть и поддерживал далеко не всё), что позволяло ещё в тех годах использовать вышеописанные в статье фичи новой спецификации.

<имхо>Мне нравится статья и как она написана (за мелкими исключениями), но либо вы опоздали с её публикацией (на год), либо сделали не на то акцент (потому что выглядит как дополнение к предыдущей статье). И извините за прямолинейность и не сочтите за оскорбление.</имхо>
Ок, не буду спорить, возможно я слабо развил тему похожести конструкций в ES6 и Java/C#, а так-же упустил возможность описать некоторые нововведения, которые не были описаны в той статье. Думаю, на этом можно прекратить спор.

По поводу вашего первого имхо скажу свое (имхо): JS сейчас в тренде, и многие программисты на других языках могут захотеть хотя-бы даже просто посмотреть «а-все-ли-так-печально-как-10-лет-назад». Однако я не видел много туториалов по JS, где использовали-бы классы, и возможность использовать ES6 to ES5 компилятор не лежит на поверхности.
<offtopic>Ну ладно «декларировать», черт с ним. Но «дефинировать» — это уже перебор, по-моему.</offtopic>
И глагол «дефинировать»? Или, может быть, «дефиницировать»?
Да, если есть существительное, значит от него можно образовать глагол. Вот, читайте. Если вы не знаете этого слова, это не значит что его нет. В следующий раз можете погуглить, прежде чем бороться за «русскость».
А зачем вы выдумали какого-то словесного урода, если есть общепринятый и всем понятный термин «определять»?
Если вам непонятен термин «дефиниция», то у меня для вас плохие новости.
«дефиниция»

у меня нехорошие ассоциации…
Есть более привычный/распространенный вариант «объявить».
Нераспространенный — согласен. «Словесный урод» и т.п. — нет.
Есть альтернатива Traceur — 6to5, может работать без runtime скрипта и генерирует более человеческий код. Из всех трансляторов которые пробовал, 6to5 показал себя самым адекватным.
Да только он один из самых медленных при компиляции.
Спасибо, вспомнил некоторые забытые вещи :)

Пара комментариев:

«Традиционное» наследование как в Java/C# можно так-же эмулировать через протопипную модель (код приводить не буду, чтобы не раздувать статью).

habrahabr.ru/post/132698/#comment_4404597

Теперь можно обменивать значения без временной переменной, что сокращает код.

Можно ещё так:
var x = 1, y = 2
x = [y, y=x][0]
можно подумать, что это наследование — не просто сахар поверх.

Доказательство(пишу по памяти, могу где-то немного накосячить):

class Horse{
constructor(){this._speed = 5;}
get speed(){return this._speed}
}
class HorseWithTransmission extends Horse{
set speed(val){this._speed = val}
}

new HorseWithTransmission().speed //=> undefined

Неожиданно, правда? А все потому что это обертка поверх Object.create
Вы не упомянули про
var name = 'nkt';
console.log(`Hello, ${name}!`); // Hello nkt

Очень удобная фича, учитывая отсутствие sprintf по дефолту.

Ну и в догонку
var name = 'nkt';
var options = {name}; // {name: name}
Так тут почти ни о чём не упомянули. Еще, на вскидку: модульная система, генераторы, протокол итераторов, for-of, абстракции массивов / генераторов, аргументы функции по умолчанию, rest / spread, динамические ключи в литерале объекта, оптимизация хвостовой рекурсии, стандартная библиотека: Symbol, Proxy, Promise, Map, Set, WeakMap, WeakSet, не считая расширения уже имеющихся объектов.
Ну во-первых не ставил я цель написать обо всем, извините. Об этом я предупреждаю:

Так как изменений очень много, опишу субъективно самые важные.


А во вторых часть из упомянутого вами сейчас не работает нигде, включая компиляторы в ES5 (типа оптимизации хвостовой рекурсии).
И что ещё, кроме неё, не работает? :)
ну можно же взять и самому посмотреть, че к человеку пристали. kangax.github.io/compat-table/es6/
По факту много чего еще нету даже в компиляторах.
Так дайте хоть один конкретный пример :) Я утверждаю, что всё остальное, что я упомянул, можно использовать с препроцессором и полифилом стандартной библиотеки. Разве что Proxy полноценно сполифилить нельзя, но он и так уже не мало где имеется.
Дабы не быть голословным, накидаю примеров в песочнице: модульная система, генераторы, протокол итераторов, for-of, абстракции массивов / генераторов, аргументы функции по умолчанию, rest / spread, динамические ключи в литерале объекта, стандартная библиотека: Symbol, Promise (и не только), Map, Set, WeakMap, WeakSet. Вы уверены, что того человека обвинили в незнании возможностей ES6, которыми можно пользоваться уже сейчас? :)
Синтаксический сахар классов конечно впечатляет, но лучше бы сделали нормальное множественное наследование с интерфейсами и статическими методами, а не а-ля typescript
Множественное то зачем?
Хотел написать, многоуровневое наследование
Многоуровневое наследование — это не то, что можно сделать в прототипно-ориентированном языке.
В ES6 появляются «настоящие» классы:

Напомнило это.
Печально все это.
Не появятся, я выше не написал — это просто сахар. Можно не волноваться, будет адов стыд и глюкало :)
UFO just landed and posted this here
Лучше-бы иметь общий байткод, конечно. Уверен, все к этому прийдет, в итоге.
Для кого бейсик, для кого F# ;)
Sign up to leave a comment.

Articles