Конечно, один большой плюс - это количество синтаксического сахара, которое во многих случаях приводит к сокращению кода. На http://jashkenas.github.com/coffee-script/ есть впечатляющие примеры. С другой стороны, я сомневаюсь, что эти примеры представляют собой код сложных реальных приложений. Например, в моем коде я никогда не добавляю функции к голым объектам, а скорее к их прототипам. Более того, функция прототипа скрыта от пользователя, предлагая классический ООП, а не идиоматический Javascript.
Пример понимания массива будет выглядеть в моем коде, вероятно, так:
cubes = $.map(list, math.cube); // which is 8 characters less using jQuery...
javascript
coffeescript
Филипп
источник
источник
Ответы:
Я являюсь автором будущей книги о CoffeeScript:
http://pragprog.com/titles/tbcoffee/coffeescript
Я был убежден, что CoffeeScript стоит использовать примерно после недели игры с ним, хотя в то время языку было всего несколько месяцев, и у него было гораздо больше неровностей, чем сейчас. Официальный сайт делает большую работу по перечислению (большей части) возможностей языка, поэтому я не буду повторять их здесь. Скорее, я просто скажу, что плюсы языка:
№ 3 привлекает гораздо больше внимания, чем первые два (даже в моей книге), но чем больше я об этом думаю, тем больше понимаю, что не сделал прыжок только из-за симпатичного синтаксиса; Я сделал скачок, потому что язык подтолкнул меня к лучшему, менее подверженному ошибкам JavaScript. Чтобы привести несколько быстрых примеров:
var
, скрыв переменную с тем же именем (за исключением именованных аргументов), или разместив переменные в разных файлах, которые взаимодействуют (см. Https://stackoverflow.com/questions). / 5211638 / pattern-for-coffeescript-modules / 5212449 ).->
что чертовски проще писать, чемfunction(){}
проще использовать обратные вызовы. Семантический отступ дает понять, когда обратные вызовы вложены. И=>
облегчает сохранениеthis
при необходимости.unless x
проще для носителей английского языка , чтобы разобрать , чемif (!x)
иif x?
проще , чемif (x != null)
, чтобы дать только два примера, вы можете тратить меньше циклов мозга на логическом синтаксисе и больше на самой логики.Отличная библиотека, такая как Underscore.js, может позаботиться о некоторых из этих проблем, но не обо всех.
Теперь о минусах:
Очевидно, я думаю, что плюсы перевешивают минусы лично для меня, но это не будет иметь место для каждого человека, команды или проекта. (Даже Джереми Ашкенас пишет много JavaScript.) CoffeeScript лучше всего рассматривать как прекрасное дополнение к JavaScript, а не замена.
источник
=>
документацию? Это круто . (Другие моменты тоже были хорошими - очень хороший непредвзятый ответ с честным списком минусов. :)Foo.prototype.bar = ...
линий по всему, что является безумием!). Это отличный способ аккуратно организовать код. С другой стороны, это может заставить людей использовать ООП, даже если функциональный подход намного элегантнее.У нас есть довольно большая кодовая база JavaScript, и около месяца назад мы решили попробовать CoffeeScript. Один из наших разработчиков начал с миграции одного из наших модулей с JS на CS с использованием http://js2coffee.org/ . Этот инструмент был довольно удобен, и портирование более чем 1000 строк JavaScript заняло около двух-трех часов. Некоторые наблюдения, которые мы заметили в этот момент:
Полученный код CoffeeScript был вполне читабельным.
Мы скомпилировали его обратно в JavaScript, и было довольно легко ориентироваться и отлаживать. Пока мы переносили этот модуль, другой разработчик из нашей команды обнаружил в нем ошибку. Эти два разработчика исправили эту ошибку в нашем старом коде JavaScript и в новом коде JavaScript, который вышел из компилятора CS. Они работали независимо, и это заняло у них примерно одинаковое количество времени (15-20 минут).
Из-за того, что это был порт, полученный код не использовал специфичные для Coffee функции, которые были бы уместны или желательны. Если бы мы писали на CoffeeScript с нуля, код был бы более идиоматичным. Из-за этого позже мы решили, что не будем переносить существующий код.
В целом читаемость более короткой функции и меньшего объекта увеличилась до некоторой степени. Однако, для более длинных методов это не имело место вообще. Самая большая экономия на вздор поступила
->
явно и явноreturn
, но кроме этого наш код не стал значительно короче или проще. Некоторые части синтаксиса казались довольно запутанными, особенно объектные литералы. CS опускает фигурные скобки вокруг определений членов и объединяется с «все-что-выражением» и подразумевается,return
что делает некоторые фрагменты кода довольно трудными для чтения.Вот JavaScript:
А вот как будет выглядеть соответствующий код CoffeeScript:
Поскольку сейчас довольно сложно понять, что оператор return начинается со
(*)
строки. В нашем проекте мы сильно полагаемся на объектные литералы: мы передаем их в качестве параметров функции и возвращаем их из других функций. Во многих случаях эти объекты имеют тенденцию быть довольно сложными: с членами разных типов и несколькими уровнями вложенности. В нашем случае общее ощущение заключалось в том, что код CoffeeScript на самом деле труднее читать, чем простой код JavaScript.Хотя отладка CoffeeScript оказалась проще, чем мы ожидали, опыт редактирования несколько ухудшился. Мы не смогли найти хорошего редактора / IDE для этого языка. Мы не стандартизировали редактор / IDE для клиентского кода для нашего проекта, и на самом деле мы все используем разные инструменты. Фактически, все в команде согласны с тем, что когда они переключаются на CoffeeScript, они получают довольно слабую поддержку от своего инструмента. Плагины IDE и редактора находятся в очень ранней форме, а в некоторых случаях они даже не могут дать нам правильную подсветку синтаксиса или поддержку отступов. Не говорю о фрагментах кода или рефакторинге. Мы используем WebStorm, Eclipse, NetBeans, VisualStudio, Notepad ++ и SublimeText2.
Говоря об инструментах, я должен упомянуть, что сам компилятор CoffeScript поставляется как пакет Node JS. Мы являемся в первую очередь магазином Java / .NET, поэтому все занимаются разработкой под Windows. До недавнего времени поддержка Windows в Node практически отсутствовала. Мы не могли заставить компилятор CoffeeScript работать под Windows, поэтому в настоящее время мы решили использовать
<script type="text/coffeescript">
тэги и браузерный компилятор «на лету».Компилятор довольно быстрый и не сильно увеличивает время запуска. Недостатком является то, что полученный JavaScript становится
eval
редактируемым, и немного сложно установить в нем контрольные точки в инструментах разработчика браузеров (особенно в IE8). Если у нас возникают трудности с отладкой, мы предварительно скомпилируем код CoffeeScript с помощью того же инструмента миграции, который я перечислил выше, но это все же не очень удобно.Другие обещания CoffeeScript, такие как автоматическая
var
вставка или полупрозрачное управлениеthis
оператором с толстой стрелкой (=>
), не дали такого большого эффекта, как мы надеялись. Мы уже используем JSLint как часть нашего процесса сборки и пишем код вES3 x ES5-Strict
подмножестве языка. В любом случае, тот факт, что Coffee производит такой же «чистый» код, - это хорошо . Желаю, чтобы каждая серверная среда тоже создавала корректную разметку HTML5 и CSS3!Тем не менее, я бы не сказал, что CoffeeScript экономит много времени, помещая
var
для меня ключевые слова. Пропавшие без вестиvar
легко распознаются JSLint и легко исправимы. Более того, как только вы это исправите в течение некоторого времени, вы все равно автоматически начнете писать хороший JavaScript . Таким образом , я бы не сказал , Кофе действительно , что полезен в этом отношении.Мы оценивали CoffeeScript около недели. Все члены команды писали код, и мы делились друг с другом своим опытом. Мы написали новый код и портировали существующий код, когда посчитали нужным. Наши чувства по поводу языка были смешанными.
В целом, я бы сказал, что это не ускорило наше развитие, но и не замедлило нас. Некоторый прирост скорости из-за меньшего набора текста и меньшей поверхности ошибок был компенсирован замедлением в других областях, в основном с поддержкой инструментов. Через неделю мы решили, что не будем обязывать использовать CoffeeScript, но и не будем его запрещать . При наличии свободного выбора на практике никто не использует его, по крайней мере, на данный момент. Время от времени я думаю о прототипировании какой-то новой функции в нем, а затем преобразую код в JavaScript перед интеграцией с остальной частью проекта, чтобы получить более быстрое начало, но я еще не пробовал этот подход.
источник
Pros
просмотреть ответ Тревора Бернхэма .
Кроме того, вы можете думать о себе как о модном парне, который делает модные вещи вместо того, чтобы возиться с грязью javascript.
Cons
CoffeeScript - это не что иное, как синтаксические сахарные и розовые очки.
Для простых вещей - CoffeeScript является избыточным, потому что делать простые вещи легко на любом языке. И jQuery, вероятно, даже проще, чем CoffeeScript.
Для тяжелых вещей - вы должны понимать свою среду. И ваш носитель - HTML, DOM и CSS, Javascript - это просто инструмент для их соединения, но все API написаны специально для Javascript. Использование другого языка, который затем будет скомпилирован в «настоящий», - довольно рискованно, будь то Java (GWT), Dart или CoffeeScript.
Анти-паттерны или банальное незнание языковых правил можно исправить, прочитав одну-две хорошие книги. И я уверен, что у Coffeescript есть свои анти-паттерны.
Поддержка IDE для Coffeescript еще хуже, чем для JS.
источник
Самым большим профессионалом, на мой взгляд, является:
Прямой coffescript компилируется в javascript, который вы должны были написать, но не сделали, потому что он не был простым.
Есть некоторые неприятные углы javascript, которых следует избегать только с бдительностью - примеры из головы:
Если вы пишете coffeescript, все это обрабатывается для вас автоматически .
Минусы, ИМО, в основном незначительные:
источник
профи
Приведенный выше пример работы Андрея, который я нашел, был поучительным. Я полагаю, что удобочитаемость их существенных объектных литеральных возвращений была бы улучшена, просто вручную идентифицируя возвращаемый результат
вернуть
// объектный литерал здесь
Инструменты IDE были улучшены, TextMate и Cloud9 поддерживают CoffeeScript. По общему признанию поддержка Windows отстает (разве это не верно для веб-разработки вообще?)
минусы
Интерпретированный браузером CoffeeScript может быть сложным для отладки.
Это дополнительный слой поверх JavaScript, требующий некоторого понимания и рассмотрения со стороны разработчиков.
источник
профи
минусы
источник