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

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

Цитата:

Сообщение от FINoM
ты не можешь определить переменную для использования во внутренней функции:

Это плохой тон, тогда ты теряешь доступ к верхней переменной, правильно что кофескрипт это запрещает.

FINoM 18.09.2015 12:07

Цитата:

Сообщение от ТОТ_САМЫЙ
Это плохой тон, тогда ты теряешь доступ к верхней переменной

Ну а если мне эта переменная не нужна? Придумывать новое название?

newtimebigtime 18.09.2015 12:10

FINoM,
Интересно, о чем речь то вообще идет? Что за "верхняя переменая"?

FINoM 18.09.2015 12:15

newtimebigtime, см мои сообщения выше.

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

У меня было такое 2 раза. И было желарип использоват одно и то же мия потому чтт более подхлдящего названич я не моо пиидумать... если тлоьько поттить. Но тогда я осознал что подобное будет создавать неоднозначность для глаз. Видя то же имя я буду думать что там тм же сущность. НАПРИМЕР:

func = (token)->
  allStrings = @tokens.every (token)-> token.isString
  ...


Если функция еври будет сложнее и занимать почти все место функции фанк, то будет создаваться впечатление что token внутри еври и вовне это одно и то же. Несмотря на то что внктри еври ориринальный token не используется.

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

Да) я купил сенсорный телнфон

Safort 19.09.2015 16:15

Цитата:

Сообщение от ТОТ_САМЫЙ (Сообщение 388924)
На одной чаще весов 0, на другой 1. Coffeescript выиграл! :)

Ок, закрываю тему В чём смысл темы? Показать, как ты прогаешь на унылом и не развивающимся CS?

EmperioAf 19.09.2015 17:27

Цитата:

Сообщение от Safort
унылом

Sorax с тобой не согласился бы...

Safort 19.09.2015 19:10

EmperioAf,
я вообще удивлён, что такой умный чувак как Зоракс кодит на CS. Но никто не идеален)

ТОТ_САМЫЙ 19.09.2015 20:12

Цитата:

Сообщение от Safort
Зоракс

Зоракс просто обьективен и не предвзят как вы, мы с ним понимаем что новый css в подметки не годится стайлесу, мы понимаем что es6 жалкая пародия на кофи, не стоящая с ним и рядом...
Цитата:

Сообщение от Safort
я вообще удивлён, что такой умный чувак как Зоракс кодит на CS. Но никто не идеален)

https://ru.wikipedia.org/wiki/Ad_hominem

Какие недостатки кофескрипта по сравнению с es6 ты знаешь?

Safort 19.09.2015 22:39

ТОТ_САМЫЙ,
Цитата:

новый css
Новый - это какой?

Цитата:

Какие недостатки кофескрипта по сравнению с es6 ты знаешь?
У ES6+ есть нормальный, читаемый синтаксис, большее сообщество, умные чуваки, грамотно разрабатывающие стандарт и, что самое главное, CS зависим от JS и не сможет нормально развиваться без JS.

ТОТ_САМЫЙ 20.09.2015 07:45

Цитата:

Сообщение от Safort
Новый - это какой?

Ну там переменные и прочее такое.

У CS, в разы лучше синтаксис чем a ES6, большее сообщество, умные чуваки, грамотно разрабатывающие стандарт и, что самое главное, CS зависим от JS и не сможет нормально развиваться без JS, а JS развивается.

ТОТ_САМЫЙ 20.09.2015 07:45

Так ребят я не понимаю мне сравнение привести штоле раз вам не очевидно? Пофиг седня заверстаю страничку со сравнением если будет время.

ТОТ_САМЫЙ 20.09.2015 09:51

В кофескрипте есть все что есть в ES6, но в ES6 есть не все что есть в CoffeeScript. Кто может поспорить с этим утверждением?

Генераторы, итераторы, аксессоры, прокси и прочая хрень - есть и в кофескрипте, и я искренне не понимаю что находится вместо мозга у тех кто заявляет что в ES6 это есть а в кофи нет. Они видимо вообще не знают что кофескрипт транслируется в яваскрипт)))) видимо туго у людей с головушкой то)



func = -> yield do get



class Cat
  Object.defineProperty @prototype, 'name',
    get: -> alert 'NAME!!!'

new Cat().name



compile to:

var Cat, func;

func = function*() {
  return (yield get());
};

Cat = (function() {
  function Cat() {}

  Object.defineProperty(Cat.prototype, 'name', {
    get: function() {
      return alert('NAME!!!');
    }
  });

  return Cat;

})();

new Cat().name;

ТОТ_САМЫЙ 20.09.2015 10:23

Можно сахар написать (и можно его даже написать не засирая прототип, просто тогда надо будет писать set @, 'name' а не @set 'name')

Function.prototype.get = (name, getter)->
  Object.defineProperty @prototype, name,
    set: Object.getOwnPropertyDescriptor(@prototype, name)?.set
    get: getter
    configurable: yes
    enumerable: yes



Function.prototype.set = (name, setter)->
  Object.defineProperty @prototype, name,
    get: Object.getOwnPropertyDescriptor(@prototype, name)?.get
    set: setter
    configurable: yes
    enumerable: yes


class Cat
  @get 'name', -> alert 'GET NAME!!!'
  @set 'name', -> alert 'SET NAME!!!'


(new Cat).name
(new Cat).name = 22


compile to:
var Cat;

Function.prototype.get = function(name, getter) {
  var ref;
  return Object.defineProperty(this.prototype, name, {
    set: (ref = Object.getOwnPropertyDescriptor(this.prototype, name)) != null ? ref.set : void 0,
    get: getter,
    configurable: true,
    enumerable: true
  });
};

Function.prototype.set = function(name, setter) {
  var ref;
  return Object.defineProperty(this.prototype, name, {
    get: (ref = Object.getOwnPropertyDescriptor(this.prototype, name)) != null ? ref.get : void 0,
    set: setter,
    configurable: true,
    enumerable: true
  });
};

Cat = (function() {
  function Cat() {}

  Cat.get('name', function() {
    return alert('GET NAME!!!');
  });

  Cat.set('name', function() {
    return alert('SET NAME!!!');
  });

  return Cat;

})();

(new Cat).name;

(new Cat).name = 22;



Можно вот так писать для красоты и.т.п.
class Cat

	get Cat, 'name', ->
		alert 'GET NAME!!!'
		
	set Cat, 'name', ->
		alert 'SET NAME!!!'

FINoM 20.09.2015 11:58

ТОТ_САМЫЙ, в своём коде ты: расширяешь прототип встроенного конструктора, определяешь дескриптор дважды, вызывая 4 функции (getOwnPropertyDescriptor x 2, defineProperty x 2), упоминаешь имя класса несколько раз (get Cat, 'name'), оставляя почву для ошибок при переименовании класса. Ну ок, если ты считаешь, что эти костыли - отличное решение. Кто-то на php прожит и ничего, все живы.

ТОТ_САМЫЙ 21.09.2015 02:36

FINoM, нет я не расширяю. Ты просто тупой. Перечитай. Ты вообще не читал походу.
Вызываю дескриптор дважды и нет причин этого не делать. Я мог единожды но мне так больше нравится.
Нет я не упоминаю имя класса гескоьько раз. Ты просто тупой. Перечитай.
Когда я определяю статические методы я тоже упоминмю. Но ты тупой. Ты это игнорируешь.
Нет причин не упоминать имя класса несколько раз. Вместо имери класса можно писать @ но тупой, текст не читал и этого не знаешь.
Что из того что там написано костыль, если то что там написано это сахар?
Ты вообще читал тпкст или только код сиотрел? Если второе то ты тупой.

Я вообще не понимпю, на этом форуме не иупые люди то вообще остались, кроме кобеззы???

ТОТ_САМЫЙ 21.09.2015 02:49

FINoM,
Учитывая что ты не такой умный я проговорю очевидность: то чть функция дефайна вызывается 2 раза это не минус так как данный участок кода(декларация классов) не является горячим и не требует оптимизации и приоритет надо ттдавать абстракциям и сахарности. Но ты тупой и не понял 100% из того что я щас сказал.

FINoM 21.09.2015 11:54

ТОТ_САМЫЙ,


Господа модераторы, персонаж перешел на прямые оскорбления. Просьба отреагировать на это в соответствии с правилами форума.

ТОТ_САМЫЙ 21.09.2015 14:05

FINoM, ты прочитай че я написал и че ты напсиал. Ты пьяный штоле был? Ты вчитайся в буквы которые я пишу и как на это реагируешь ТЫ. Я говорю ему что @ и имя класса в теле класса это одно и то же и что мол для наглядности и красоты можно писать get ClassName а не get @
а он мне "Ты пишешь имя класса каждый раз из за чего возможно опечататься" ты че поехавший??? опечатывальщик хренов. ты сам то веришь в что говоришь? в ES6 статические всегда так и обьявляются и там можно опечататься? Ты если название функции где то пишешь много раз то МОЖНО ЖЕ ОПЕЧАТАТЬСЯ)!!!!! Купи мозг парень, просто купи мозг, и трезво воспринимай аргументы мои.

п.с. ага, "тупанул @ прикинься троллем (с) FINoM"

trikadin 21.09.2015 17:13

ТОТ_САМЫЙ, спокойнее выражайся, и дискуссия будет конструктивнее.

FINoM, спокойно, держим руку на пульсе)

FINoM 28.09.2015 10:04

Make ES6, Not Coffee

ТОТ_САМЫЙ 28.09.2015 15:06

FINoM, Я могу назвать около 20 преимуществ кофи над es6. Я Думаю в этом сомнений нет. НО назови ХОТЬ ОДНО преимущество ES6 над кофи?

Erolast 28.09.2015 17:45

Цитата:

назови ХОТЬ ОДНО преимущество ES6 над кофи?
Нативная система модулей.

Цитата:

Я могу назвать около 20 преимуществ кофи над es6
Вперед.

ТОТ_САМЫЙ 28.09.2015 18:35

Цитата:

Сообщение от Erolast
Нативная система модулей.

Если кофескрипт компилится в яваскрипт то и у него она есть. Какие же вы ребят умные все тут я поражаюсь...


Цитата:

Сообщение от Erolast
Вперед

Когда вот так мне на яваскрипте напишешь, тогда и звони:

addModulePath = (type, path)->
  (modules[type] or= []).push(path)


var addModulePath;

addModulePath = function(type, path) {
  var base;
  return ((base = modules)[type] || (base[type] = [])).push(path);
};


или хотя бы так:
number = 4
alert 'ololo' if 3 < number < 9


var number;

number = 4;

if ((3 < number && number < 9)) {
  alert('ololo');
}



ну или ХОТЯЯЯЯЯ БЫ так:
alert User?.name ? 'Ашот'


var ref;

alert((ref = typeof User !== "undefined" && User !== null ? User.name : void 0) != null ? ref : 'Ашот');

Erolast 28.09.2015 18:44

Цитата:

Если кофескрипт компилится в яваскрипт то и у него она есть.
Покажи.

Цитата:

вот так мне на яваскрипте напишешь
Что? Зачем? :blink:

На...
let addModulePath = (type, path) => (modules[type] || (modules[type] = [])).push(path);


Хотя читаемость ужасна. Я бы сделал так:
function addModulePath(type, path) {
    if (!type in modules) {
        modules[type] = [];
    }
    
    modules[type].push(path);
}

Erolast 28.09.2015 18:46

Цитата:

Что? Зачем?
А, или это те самые преимущества? Окей, давай еще 17.

ТОТ_САМЫЙ 28.09.2015 19:58

Цитата:

Сообщение от Erolast
Хотя читаемость ужасна.

Читаемость прекрасна, как разговорный английский практически. Ты просто не привык. Это как ты всегда едлал q = q+1
а потом ввели оператор q++ и ты такой "читаемость ужасна"

а во вторых

if (!(type in modules)) {
        modules[type] = [];
    }
}


А если тебе нужно этот массим получить в переменную а потом с ним играться?

modules = @modules[type] or = []
modules.push()
modules.length


в ЯС это будет вот такой ужос:

if(!this.modules[type]){
  this.modules[type] = []
}

modules = this.modules[type]
modules.push()
modules.length


или даже такой:

modules = this.modules[type] || (this.modules[type] = [])
modules.push()
modules.length


В общем я не буду учавствовать в дискуссии на тему сравнения синтаксиса кофескрипта и яваскрипта. Каждому дураку очевидно что это небо и земля и что яваскрипт не сравнится с кофескриптом. Если у тебя есть какие-то сомнения то погугли про кофескрипт.

п.с. это каким надо быть не грамотным чтобы начать ДОКАЗЫВАТЬ ЧТО у кофескрипта НЕ лучше синтаксис)!! ЭТО ЖЕ ЖЕСТЬ)!!! ЕГО И СДЕЕЕЛАЛИ потому что лучше синтаксис!! Его ДЛЯ ЛУЧШЕГО СИНТАКСИСА И ИЗОБРЕЛИ МЛЯТЬ)!!!! Как можно не знать таких вещей?


ЧТО же до модулей?

Cat = require 'modules/Cat'

module.exports = ->
  new Cat


Я чет не врубаю, ты не знал что так можно писать? на node вообще штоле не писал?

ТОТ_САМЫЙ 28.09.2015 20:07

Иными словами я тебе привожу пример сахара а ты говоришь мне "НУ И ЧТО ЭТО МОЖНО И БЕЗ САХАРА ДЕЛАТЬ ТАК ЧТО САХАР НЕ СЧИТАЕТСЯ" логкиа у тебя есть нет?


Я ТЕБЕ И ПРИВОЖУ ЧТО МОЖНО ПИСАТЬ
НЕ ВОТ ТАК this.modules[type] || (this.modules[type] = [])
А ВОТ ТАК @modules[type] ||= []


Ты будешь сильно удивлен но я даже 5% фишек кофескрипта не назвал)

ТОТ_САМЫЙ 28.09.2015 20:12

я уж молчу про это:

name = User?.getFullName?(My?.name) ? defaultName


против:

var name, ref;
name = (ref = typeof User !== "undefined" && User !== null ? typeof User.getFullName === "function" ? User.getFullName(typeof My !== "undefined" && My !== null ? My.name : void 0) : void 0 : void 0) != null ? ref : defaultName;

Erolast 28.09.2015 20:33

Цитата:

Читаемость прекрасна, как разговорный английский практически. Ты просто не привык. Это как ты всегда едлал q = q+1
а потом ввели оператор q++ и ты такой "читаемость ужасна"
Да, дело привычки. Можно напридумать дохренище сокращений, но вот меня, например, вполне устраивает лаконичность уровня ES6. Именно поэтому я не использую кофи: для меня это чрезмерный сахар, непонятно зачем нужный, если уже есть ES6.

Цитата:

Если у тебя есть какие-то сомнения то погугли про кофескрипт.
Хочешь заманить юзера, заставив его самому искать инфу? Да ты прямо-таки мастер пиара)

Цитата:

В общем я не буду учавствовать в дискуссии на тему сравнения синтаксиса кофескрипта и яваскрипта.
А пошто тему-то тогда открыл? :D

Цитата:

Я чет не врубаю, ты не знал что так можно писать? на node вообще штоле не писал?
Ты не врубаешь, да. Во-первых, система ES6-модулей не аналогична common.js, хоть и похожа (см. export default, рекурсивный импорт); во-вторых, в ES6 есть выделенный синтаксис для работы с модулями, сахар:
import Animal from "./animal";
export default class Cat extends Animal {};

Это наипростейший пример. В прошлом посте я дал ссылку на статью о ES6-модулях, там гораздо больше, если хочешь.

Цитата:

ты говоришь мне "НУ И ЧТО ЭТО МОЖНО И БЕЗ САХАРА ДЕЛАТЬ ТАК ЧТО САХАР НЕ СЧИТАЕТСЯ"
Ты упоролся? Где я такое говорил?

Цитата:

Ты будешь сильно удивлен но я даже 5% фишек кофескрипта не назвал)
Ты обещал около 20 преимуществ, так дерзай, отвечай за базар)

ТОТ_САМЫЙ 28.09.2015 21:20

Цитата:

Сообщение от Erolast
Хочешь заманить юзера

Так предполагается что здесь учавствуют люди которые знают и тот и тот язык. Иначе как можно сравнивать то)?

Цитата:

Сообщение от Erolast
Ты обещал около 20 преимуществ, так дерзай, отвечай за базар)

Я не собираюсь этого делать) ты если погуглишь то сам найдешь. Имеется ввиду что их уже знают те кто знает кофескрипт. Имеется ввиду что все мы их можем назвать и сомнения они не вызывают) Если ты не знаешь о них и у тебя есть сомнения гугл в помощь. Я не собирался доказывать здесь это утверждение, так как оно не вызывает ни у кого сомнений)

Цитата:

Сообщение от Erolast
Ты упоролся? Где я такое говорил?

Так а где "блин, классно придумали) и удобно и красиво, зачет"? Почему я вместо этого получаю попытки в стиле "это НЕ ОБЯЗАТЕЛЬНО!! МОЖНО И БЕЗ ЭТОГО ПСИАТЬ ПО ЭТОМУ НЕ СЧИТАЕТСЯ ЗА ПЛЮС111"

что же касается модулей то раз мы компилим кофескрипт, то есть возможность так же закомпилить его модули в синтаксис ES6. Мы пишем модули в стиле commonjs а потом пропускаем через coffee транслятор а потом через какой нить другой плагин который модули конвертит. Гуглить его я за тебя не буду, хотя возможно и буду) я пока не вижу смысла это делать потому что ES6 нигде не поддерживается и конвертировать commonjs модули в ES6 модули чтобы потом пргнать через ES6 транслятор и они закомпилились в врапперы это тупость. Лучше сразу commonjs модули закомпилить во врапперы. или через браузерифай прогнать)

То есть нативная система модулей ES6 НЕ выигрывает у кофескрипта, потому как и те и те модули нужно прогонять через транслятор и оборачивать во врапперы)

Lemme 28.09.2015 21:30

Цитата:

Я могу назвать около 20 преимуществ кофи над es6
Цитата:

Я не собираюсь этого делать)
Т.е ты можешь, но не собираешься, но тогда вопрос - зачем говорить, если делать не собираешься - пустослов??

Цитата:

так как оно не вызывает ни у кого сомнений)
Не было б тут 8 страниц, если б их не было.

Цитата:

у тебя есть сомнения гугл в помощь
Но ведь...
Цитата:

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

kobezzza 28.09.2015 21:47

Тред не читал, но могу сказать своё мнение, если кому интересно: мне очень нравится Coffee, но есть пару НО, из-за которых я его не юзаю:

1) Пинг между фичами JS в Coffee, т.е. грубо говоря расстраивает скорость обновления транслятора;

2) Отсутствие системы декларации и вывода типов, в JS хотя бы JSDoc есть, но тоже не фонтан - я сейчас говорю про поддержку ИДЕ и системы стат анализа кода. Очень жду ТС 2.0, т.к. там они обещали заимлементить весь ЕС6/7 + их мега система типов (в новом релизе 1.6 они например добавили пересечения типов и тай гуарды - это просто офигенно). Также присматриваюсь к Flow, но огорчает отсутствие бинарников под винду и отсутствие поддержки где ли кроме как в Атоме (плагин nuclide);

3) Сложнее найти разработчика в команду: отталкиваюсь опять таки от своего опыта.

Это пожалуй основное. Но повторюсь: мне очень нравиться кофескрипт за свою простоту и лаконичность.

ТОТ_САМЫЙ 28.09.2015 22:00

Цитата:

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

Ты просто тупой, мои слова несут смысл "есть куча плюсов кофескрипта". Я говоря эту фразу не ожидал что её прочтут тупые люди не знакомые с кофескриптом.

ТОТ_САМЫЙ 28.09.2015 22:02

kobezzza, кофескрипт это просто синтаксис, сахар, и набор сниппетов. По сути можно написать кофи версию которая будет транслироваться в тайпскрипт 2 например. Ну помнишь мы хотели убиратор скобочек написать) ну вот типа того. В кофи есть парсер в AST и транслятор из него в javascript. Можно транслировать из AST в любой другой язык. Я надеюсь они оставили возможность для расширения кофескрипта? Ну то есть мы хотим оставить всякие фишки трансляции но заменить некоторые чтобы синтаксис был не es5 а typescript или es6. Исходники их кто нибудь смотрел)?

Не, я как бы в юишку в {{выражения}} уже разный сахарок из кофескрипта стырил) но мне не хочется весь кофескрипт переписывать)

FINoM 28.09.2015 22:06

Цитата:

Сообщение от ТОТ_САМЫЙ
Ты просто тупой

А я уже потерял надежду, что максимаксимус снова скатится в говно себя. Чуть попкорн не закончился.

ТОТ_САМЫЙ 28.09.2015 22:07

FINoM, не ну он правда тупит и еще дерзит из-за своей тупости) че я то деликатничать должен?

п.с. Javascript - прога чтобы в браузерах рисовать. ©Livaanderiamarum
статус то поменяй на (с)Maxmaxmaximus

Цитата:

Сообщение от FINoM
максимаксимус

я максмаксмаксимус! Нет там "и"

FINoM 28.09.2015 22:14

Цитата:

Сообщение от ТОТ_САМЫЙ
я максмаксмаксимус! Нет там "и"

Ты Нэмо.

Lemme 28.09.2015 22:16

ТОТ_САМЫЙ, они тупые, он тупой, вы все тупые. Дикий ты какой-то. А на деле, я указал на то, что ты противоречишь сам себе. Т.е ты пустослов. Это из за этого я тупой?=) Мне тебя жаль.
А если ты не пустослов, то сдержи слово насчет 20 плюсов и обоснуй мою тупость в прошлом посте. Либо можешь упустить второе, если скажешь, что ты "ступил".


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