Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   CoffeeScript vs ES6 (https://javascript.ru/forum/offtopic/58349-coffeescript-vs-es6.html)

ТОТ_САМЫЙ 17.09.2015 01:45

CoffeeScript vs ES6
 
Есть хоть одно преимущество ES6 над Coffeescript? ответ: НЕТ!
Есть хоть одно преимущество Coffeescript над ES6? ответ: Сахар!

На одной чаще весов 0, на другой 1. Coffeescript выиграл! :)

Lemme 17.09.2015 01:58

Игра в весы? Весело.

Придет время, когда трансляторы для ES6 не понадобятся и что сделают люди, которые используют es6? Выключат транслятор и все будет круто.


newtimebigtime 17.09.2015 02:13

Я в ES6 ничего хорошего, кроме Proxy, Генераторов и Обещаний не вижу. Хотя и это все говенно реализовано, но лучше чем ничего. Тут хипстерочки постят постоянно какие-то фичи, но особо не впечатляет. Классы -- это вообще даунгрейд. Так и до жабы недалеко.

Coffescript сосет у обоих. Там даже нормальной объектной системы нет. Никогда с этим вонючим говном не связывался, и другим не советую.

Lemme 17.09.2015 02:16

newtimebigtime, да чем тебе классы не угодили то? Единственное, чего не хватает, дак это приватных методов.

newtimebigtime 17.09.2015 02:25

Lemme,
Возврат к классам -- это деградация. Когда появился первый прототипный язык -- self, о нем говорили, это тот же Smalltalk, только more Smalltalk. От него ответвились несколько языков, в числе которых JS. Прототипы концептуально проще, гибче и мощней. Это метаобъектная модель в чистейшем виде. Не хватает только множественного наследования.

newtimebigtime 17.09.2015 02:33

Цитата:

Сообщение от Lemme
классы

Но появление классов -- это неизбежное зло. В JS за последние годы набежало множество планктона из энтерпрайза, они на JS ,просто не могут писать

ТОТ_САМЫЙ 17.09.2015 03:48

Цитата:

Сообщение от Lemme
Придет время, когда трансляторы для ES6 не понадобятся и что сделают люди, которые используют es6? Выключат транслятор и все будет круто.

Иииии как отсутствие транслятора дает плюс?

Цитата:

Сообщение от Lemme
да чем тебе классы не угодили то?

да это тролль он вобще ахинею несет, не разговаривай с ним разговаривай со мной))

Lemme 17.09.2015 14:23

Цитата:

Иииии как отсутствие транслятора дает плюс?
Да, чистый код. А с кофе - ты чистого кода не получишь, как не потей.

Erolast 17.09.2015 17:08

Lemme, newtimebigtime - это foo.

Цитата:

Да, чистый код. А с кофе - ты чистого кода не получишь, как не потей.
Выходной код? Sourcemaps в помощь.

Цитата:

Есть хоть одно преимущество Coffeescript над ES6? ответ: Сахар!
Единственное, в чём coffeescript сейчас лаконичней ES6 - меньшее количество пунктуации, а это уже дело вкуса. Мне, например, сейчас скобочки больше по душе; хотя, конечно, при надобности и к ruby-like привыкнуть смогу.

newtimebigtime 17.09.2015 17:19

Цитата:

Сообщение от Erolast
сейчас лаконичней ES6

Ты когда про лаконичность говоришь, подразумеваешь некое детсадовско-перловское опредление, типа, я напишу эту строчку, короче на десять символов, cool!!! Когда речь идет об архитектуре, или даже просто НЕсинтетическом кейсе, новое говно отсосет, что подтверждалось тут неоднократно, на ООП-примерах. Отсосет во всех отношениях, включая и лаконичность.

FINoM 17.09.2015 17:29

Цитата:

Сообщение от ТОТ_САМЫЙ
Есть хоть одно преимущество ES6 над Coffeescript? ответ: НЕТ!

Async functions, не? for..of loops не? let, const не?

FINoM 17.09.2015 17:31

Запишите туда модули, декраторы и полный контроль над областью видимости.

newtimebigtime 17.09.2015 17:38

Цитата:

Сообщение от FINoM
и полный контроль над областью видимости.

это что такое?

Erolast 17.09.2015 17:41

Цитата:

async functions, декраторы
Это не ES6, это еще разрабатываемые фичи.
Аналог for of там есть.

Lemme 17.09.2015 17:48

Цитата:

newtimebigtime - это foo.
эт ясно, его можно отличить от любого;)
Цитата:

Выходной код? Sourcemaps в помощь.
Не совсем об этом говорил, я говорил о чистоте и размере кода (без транслятора).

Т.е этот код 123byte
class MyClass {
  constructor(myArg) {
    this.myProperty = myArg;
  }
  init() {
    console.log(this.myProperty);
  }
}


А если прогнать его через babel, то 1 012 bytes

Lemme 17.09.2015 17:56

Цитата:

это что такое?
for (var i = 0; i < 5; i++){
	//TODO
}
console.log(i); //5

for (let i = 0; i < 5; i++){
	//TODO
}
console.log(i); // ReferenceError: i is not defined

FINoM 17.09.2015 18:00

Цитата:

Сообщение от Erolast
Это не ES6, это еще разрабатываемые фичи.

Да, разрабатываемые. При этом, Кофе не развивается.

newtimebigtime 17.09.2015 18:01

Lemme,
Я не понял, в чем заключается контроль? В первом случае, ты можешь продолжить итерацию с текущего состояния, а можешь обнулить переменную, можешь ее удалить -- все под твоим контролем. Во втором случае никакого контроля нет, ты не можешь ничего сделать, поведение предопределено. В чем контроль?

FINoM 17.09.2015 18:02

Цитата:

Сообщение от Lemme
А если прогнать его через babel, то 1 012 bytes

https://babeljs.io/docs/usage/runtime/

FINoM 17.09.2015 18:04

newtimebigtime, другими словами, ты не можешь определить переменную для использования во внутренней функции:
function a() {
  var x = 1;
  function b() {
    var x = 2;
  }
}

Плюс, ты не можешь использовать let в циклах и условных блоках.

Lemme 17.09.2015 18:04

newtimebigtime, в том, что я могу ограничить область видимости данной переменной для текущего блока (без танцев с бубном). И да, var никто не отменял.

newtimebigtime 17.09.2015 18:07

FINoM,
Ты не можешь... ты не можешь... ты не можешь... То есть контроль заключается в том, что ты них*я не можешь? А когда х*й не можешь поднять, это контроль за х*м по этой логике?

newtimebigtime 17.09.2015 18:08

Цитата:

Сообщение от Lemme
без танцев с бубном

Неявное поведение -- это и есть танцы с бубном.

FINoM 17.09.2015 18:10

Цитата:

Сообщение от newtimebigtime
То есть контроль заключается в том, что ты них*я не можешь?

Нет, как раз наоборот. С JS ты можешь больше.

Lemme 17.09.2015 18:10

Цитата:

Неявное поведение -- это и есть танцы с бубном.
newtimebigtime, почему не явное, оно как раз таки явное. I используется в теле цикла, а дальше ее быть не должно, дак в чем не явность то?

newtimebigtime 17.09.2015 18:12

Цитата:

Сообщение от FINoM
С JS ты можешь больше.

С JS -- да. Но то что ты сказал, к контролю за областями видимости не имеет никакого отношния. Это называется ограничение области видимости. Локальные переменные, блочный скоп.

FINoM 17.09.2015 18:12

Одной штуки, конечно, не хватает в JS, которая есть в Кофе:
zip = lottery.drawWinner?().address?.zipcode

Цитата:

The accessor variant of the existential operator ?. can be used to soak up null references in a chain of properties. Use it instead of the dot accessor . in cases where the base value may be null or undefined. If all of the properties exist then you'll get the expected result, if the chain is broken, undefined is returned instead of the TypeError that would be raised otherwise.

FINoM 17.09.2015 18:13

Цитата:

Сообщение от newtimebigtime
Это называется ограничение области видимости.

Да, немного неверно использовал терминологию.

newtimebigtime 17.09.2015 18:15

Цитата:

Сообщение от Lemme
а дальше ее быть не должно

В одном случае ты сам решаешь, должна она там быть или не должна, а во втором за тебя уже все решили.

Lemme 17.09.2015 18:16

newtimebigtime, нет, решил я, когда написал let вместо var. Но согласен - это не контроль, а
Цитата:

Это называется ограничение области видимости.

newtimebigtime 17.09.2015 19:07

Цитата:

Сообщение от FINoM
Одной штуки, конечно, не хватает в JS, которая есть в Кофе:

теперь есть.
Object.prototype.$=function(slot){
 var self = this
 if(slot in this && typeof this[slot] === "function") return function(){return self[slot].apply(self, arguments)}
 if(slot in this) return this[slot]
 return {value: undefined}
}

o={foo: {bar: 1}, bar: 1, baz: function(x){return x+this.bar}}

console.log(
 o.$("foo").$("bar"),
 o.$("baz")(4),
 o.$("moo").$("foo")
)

//1 5 { value: undefined }

Вопросительный знак использовать не получится, но можно юзать другие идентификаторы. Синтаксис чуть другой, суть та же. МБ надо чуть допилить, толком не тестил.

FINoM 17.09.2015 19:12

Цитата:

Сообщение от newtimebigtime
теперь есть.

Выглядит как адовый костыль. Плюс, какать в прототипы не очень верно.

newtimebigtime 17.09.2015 19:19

Цитата:

Сообщение от FINoM
Выглядит как адовый костыль.

Это с непривычки. По сути - то е самое.
Цитата:

Сообщение от FINoM
в прототипы не очень верно.

это не обязательно. Можно создать сабкласс Object, и на его основе слепить то же самое.

Короче, я говорю, никаких принципиально важных возможностей в этих хипстерских поделиях нет, таких, которые нельзя реализовать нативно. Все эти Вау, сводятся к мелким синтаксическим вещам, там скобочку не надо ставить, там стрелочка вместо function, короче детсад, даже экономией на спичках назвать трудно.

FINoM 17.09.2015 19:24

Цитата:

Сообщение от newtimebigtime
там стрелочка вместо function

В ES6 тоже есть стрелочка. Она даже в 46 Хроме есть, без флагов.

newtimebigtime 17.09.2015 19:27

Цитата:

Сообщение от FINoM
В ES6 тоже есть стрелочка. Она даже в 46 Хроме есть, без флагов.

Я к тому, что это детсад. В крупном приложении эти стрелочки/нестрелочки в общем объеме кода мало что решают.

FINoM 17.09.2015 19:35

Цитата:

Сообщение от newtimebigtime
В крупном приложении эти стрелочки/нестрелочки в общем объеме кода мало что решают.

Ну не скажи. Как раз в крупном проекте они и нужны, чтоб улучшить читаемость кода и уменьшить количество строк.

newtimebigtime 17.09.2015 19:37

Цитата:

Сообщение от FINoM
чтоб улучшить читаемость кода и уменьшить количество строк.

Количество строк ты этим существенно не уменьшишь. А читаемость -- понятие субъективное, не буду спорить.

Lemme 17.09.2015 19:47

newtimebigtime, ты просто уперся в свое, а пробовать не хочешь "вдруг понравится, что я тогда делать буду?".

Все, кто юзают айфоны, говорят - фуфу вы все ходите с лопатами (4.7+ дюймов), а потом выходит iphone 6, 6+. О, это круто. Но.... Как же 4 дюйма???

Ты сейчас выглядишь как пользователь iphone 5 :D, который думает, что 4дюйма это невероятно круто.

l-liava-l 17.09.2015 20:22

Цитата:

Ну не скажи. Как раз в крупном проекте они и нужны, чтоб улучшить читаемость кода и уменьшить количество строк.
Ты паришься из-за того сколько строк полетит в репозиторий? :)

Читаемость кода улучшает дробежка на мелкие кусочки с явным API и желательно с документацией. К сожалению во многих проектах не всегда есть время на доки, а тем более юнит тесты. В таких условиях коффе код превращается в одну огромную регулярку с большей вероятностью чем js.


Эхх я тут умничал думая что твое сообщение касалось сахарности кофе


Цитата:

Одной штуки, конечно, не хватает в JS, которая есть в Кофе:
Ага, иногда рука дергается :yes:

ТОТ_САМЫЙ 18.09.2015 01:40

Цитата:

Сообщение от FINoM
Async functions, не? for..of loops не? let, const не?

Не


Часовой пояс GMT +3, время: 23:25.