Статьи

Вы должны изучить CoffeeScript?

Я полагаю, что я представляю большую часть сообщества веб-разработчиков. Я очень заинтригован CoffeeScript ; Я даже выучил синтаксис и использовал его в нескольких демонстрациях. Тем не менее, я еще не сделал решающий шаг и использовал его в реальном проекте. Это сводится к одному моему вопросу: действительно ли CoffeeScript — это то, что действительно стоит потратить время и усилия на обучение?

Я не был уверен, поэтому я составил список часто задаваемых вопросов (вместе с несколькими моими) и попросил совета у нескольких мастеров в отрасли — по обе стороны забора.

  • «Я самоуверенный помощник по JavaScript, исправляю ошибки и проверяю тесты. У меня есть степень бакалавра в области мультимедийного обучения, отличная жена и щенок».
  • @jdalton
  • FuseJS
  • Benchmark.js
  • Уксебу Био

  • «Я являюсь разработчиком программного обеспечения, уделяя особое внимание удобству использования ASP.NET, jQuery и веб-приложений».
  • @encosia

  • «Я — экстраординарный специалист по компьютерным наукам, живу в Вашингтоне, округ Колумбия. Я специализируюсь на веб- и мобильных разработках и люблю работать с Django и Android».
  • @pewpewarrows

  • «По профессии я являюсь разработчиком JS с большим опытом разработки интерфейсных приложений, использующим новые классные технологии JS / HTML5 / CSS3 и использующими различные фреймворки».
  • @padolsey
  • Поваренная книга jQuery
  • Уксебу Био

  • «Я работаю разработчиком пользовательского опыта в Pure Charity».
  • @nathansmith
  • 960.gs

  • «Я являюсь веб-разработчиком внешнего интерфейса из Солт-Лейк-Сити, штат Юта, и занимаюсь созданием сайтов с начала 90-х годов».
  • @ryanflorence
  • Instructure
  • Различные проекты


Да. CoffeeScript не совсем новый и странный язык. Он существует для того, чтобы позволить «достаточно солидным» разработчикам JavaScript писать тот же код, который они собирались написать в первую очередь, более читаемым и быстрым способом. Основная идея — написать то, что вы имеете в виду, вместо того, чтобы писать в рамках исторической случайности. Например, если я хочу перебрать все элементы списка в CoffeeScript, я могу написать, что я имею в виду:

1
2
for item in list
     process item

В то время как в JavaScript я частично скрываю свое намерение, написав:

1
2
3
4
for (var i = 0, l = list.length; i < l; i++) {
     var item = list[i];
     process(item);
   }

CoffeeScript позволяет «достаточно солидным» разработчикам JavaScript выполнить последнее, просто написав первое.

  • Возможность написания кода, который работает в старых версиях Internet Explorer без компромиссов
  • Не нужно беспокоиться об ошибках JavaScript, таких как запятые и автоматическая вставка точек с запятой
  • Уточнена семантика, где каждая языковая конструкция может использоваться как часть большего выражения
  • и множество дополнительных функций, перечисленных на CoffeeScript.org

Если вы знакомы с JavaScript и способны создавать выразительные API, которые вам подходят, то я не думаю, что есть достаточный стимул для изучения CoffeeScript. Расширение горизонтов и изучение новых парадигм и шаблонов программирования — это всегда хорошо, но если вы изучаете CoffeeScript, чтобы он мог в конечном итоге заменить вашу потребность в JavaScript, то есть другие вещи, которые следует учитывать.

Если вы отлично разбираетесь в JS, я не думаю, что есть реальный стимул изучать CoffeeScript. Такие вещи, как случайные утечки глобальных переменных, ошибки оператора switch и другие потенциальные ошибки JS, могут обрабатываться linters / text-редакторами JS и не требуют этапа компиляции / Node.js. Класс Sugar настолько прост, что любой JS-разработчик может, при необходимости, смоделировать его в несколько строк. Мне нравится двойное равенство ==, переключение между операторами и я знаю, как лучше написать мой JS.

Необходимость соответствовать чужим правилам того, что они считают уместным, плохо сочетается со мной.

Кроме того, не забывайте, что CoffeeScript не без собственных бородавок.

Постоянное знакомство с новыми перспективами и технологиями является важной частью поддержания себя в нашей области.

Абсолютно. Постоянное знакомство с новыми перспективами и технологиями является важной частью поддержания себя в нашей области, и CoffeeScript, безусловно, является отличным кандидатом для этого в пространстве JavaScript. Даже если вы в конечном итоге решите, что CoffeeScript вам не понравится, возможность написать немного CoffeeScript должна стать предпосылкой для принятия обоснованного решения в любом случае.

Я использую CoffeeScript уже несколько месяцев, как часть моей работы в качестве внешнего разработчика в команде Rails. Я не знаю, скажу ли я, что есть стимул к изучению CoffeeScript, если вы уже знаете JavaScript. Я не уверен, что будет получен невероятный прирост скорости, потому что на самом деле не существует «лучшего» инструмента для работы, только тот, с которым вы наиболее знакомы для выполнения данной задачи.

Несмотря на то, что мне нравится удобное чувство JavaScript (как хорошо сложенная пара туфель), в CoffeeScript также есть много чего понравиться — например, синтаксис «never». Я бы предпочел использовать CoffeeScript, чтобы поговорить с другом, который специализировался на английском языке, исправляя вашу грамматику все время. Это замечательно, если вам нужно это руководство, но иногда я просто хочу, чтобы оно было «непринужденным» и говорило на сленге, не беспокоясь о том, на что оно будет переводиться.

Примечание: я приостановил суждение до тех пор, пока не прочел книгу Тревора Бернхема о CoffeeScript. Теперь, когда я знаю больше об этом, я хорошо использую CS, когда я в команде, которая уже использует его, но я все еще склоняюсь к тому, чтобы предпочесть JS для своих собственных проектов.

Абсолютно. CoffeeScript влияет на решения TC-39 (такие как отсутствие паренков, синтаксис классов, синтаксис стрелок и т. Д.). Будущие версии JavaScript, скорее всего, будут очень похожи на CoffeeScript. Я решил выучить это после того, как Брендан упомянул о его влиянии во время его выступления в TXJS.

Если есть что узнать о CoffeeScript, это то, что это _Just JavaScript ™ _. Я считаю его частью нашего сообщества, и мне очень понравилось изучать его и использовать. Это не похоже на другой язык, когда вы используете его.

(Ограничив мой ответ ответом на комментарии Райана Флоренса о TC39, за исключением моего последнего абзаца.)

Влияние CoffeeScript на TC39 на практике в основном заключается в том, что я пишу и предлагаю соломенные работы. Никто еще не застрял. Я собираюсь переоборудовать без паренов, чтобы быть более похожим на CoffeeScript, так как переводы строк будут более значительными в заголовках операторов (это решает некоторые неприятные сложные случаи, выявленные Уолдемаром Хорватом, см. Es-обсуждения). Но нет блочной структуры на основе отступов.

Синтаксис функции со стрелкой стоил того, чтобы его сделать, но он этого не сделает. Блочные лямбды находятся в лучшей форме, но еще не «в». Как сказал Джереми: «Для записи, я тоже предпочитаю [лямбды блоков], если стрелкам в JS понадобятся фигурные скобки для разделения блоков. Вьющиеся или стрелки, а не оба ».

То, что JS и CoffeeScript формально ко-выразительны — имеют одинаковую семантику — огромно. Да, это означает, что вы могли только что написать JS. Но продуктивность и красота (в глазах некоторых наблюдателей) имеют значение; синтаксис имеет значение.

Короче нет. По моему мнению, стимулы для CoffeeScript — это стимулы для разработчиков, которые не до конца понимают язык. Например, для … в циклах и в глобальных утечках и не понимая «это» полностью. Если вы понимаете эти вещи, вы не делаете эти ошибки в первую очередь, и если вы это делаете, вы сразу же знаете, в чем проблема, и знаете, как их исправить. Использование целого языка для исправления распространенных ошибок кажется излишним.

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

Есть несколько разных подходов к ответу на этот вопрос. Прежде всего, из профессионального любопытства вы всегда должны изучать новые языки, технологии, библиотеки и фреймворки. Худшее, что может случиться с вами как с разработчиком, это застрять в колее. Если первым языком, который вы выучили, был COBOL, ColdFusion или PHP, и через пять лет ваши знания все еще широки, вы просто просите устареть. Опять же, одинаково хуже переходить на новый вкус месяца каждый раз, когда что-то слегка интересное появляется в вашей новостной ленте или твиттере. Имейте здоровое любопытство, сохраняя разумный скептицизм.

Возвращаясь к теме, если вы и ваши коллеги уже разбираетесь в том, чтобы ограничивать себя «хорошими частями» JavaScript, и до боли осведомлены о его особенностях, то CoffeeScript, вероятно, не предложит вам многого. Это более похожий на Ruby или Python подход к синтаксису для языка, который делает все возможное, чтобы вы или ваша команда не стреляли себе в ногу. Но это не для всех.

Очевидно, у меня есть финансовый интерес в этом вопросе ( моя книга была выпущена PragProg в мае), так что вы можете принять мои слова с недоверием. Но да, я думаю, что изучение CoffeeScript стоит времени. Это не займет много усилий, чтобы учиться; CoffeeScript — это в основном сумма нескольких десятков синтаксических сахаров поверх JavaScript. И награда в том, что вы можете написать более красивый код, когда захотите. Например, некоторые JavaScripters используют CoffeeScript только для своих модульных тестов.

Некоторые люди жалуются на необходимость использования компилятора поверх JavaScript, но некоторые из недостатков JavaScript, такие как автоматическое глобальное создание, когда ключевое слово var опущено (см. Здесь ), более или менее требуют использования других инструментов или строгого режима. CoffeeScript — один из таких инструментов, и он легко входит в число самых популярных.

Мои программы CoffeeScript заканчиваются примерно на половину длины эквивалентного источника, написанного на JavaScript.

Абсолютно; На самом деле, я бы сказал, что у CoffeeScript есть еще один стимул для изучения, если вы являетесь солидным разработчиком JavaScript. CoffeeScript, безусловно, требует некоторого знания JavaScript, от этого никуда не деться. Знание JavaScript является обязательным условием, особенно когда речь идет об отладке.

Однако для хороших разработчиков JavaScript CoffeeScript предлагает множество преимуществ, таких как исправление распространенных ошибок, касающихся глобальных переменных, точек с запятой и сравнений на равенство. Честно говоря, даже лучшие разработчики JavaScript время от времени допускают подобные ошибки.

Другим важным преимуществом, которое CoffeeScript предлагает мне перед JavaScript, является синтаксический сахар, такой как более короткие объявления функций, понимание и простая абстракция класса. Мои программы CoffeeScript заканчиваются примерно на половину длины эквивалентного источника, написанного на JavaScript, с вдвое большей ясностью.


Основная идея CoffeeScript заключается в том, чтобы выразить семантику JavaScript в максимально удобочитаемом и минимальном синтаксисе, который мы можем найти.

CoffeeScript предназначен для разработчиков JavaScript. Он, безусловно, заимствует идеи из других динамических языков, включая Python, Ruby и Perl. Но в конечном итоге основная идея CoffeeScript состоит в том, чтобы выразить семантику JavaScript в максимально удобочитаемом и минимальном синтаксисе, который мы можем найти.

Мне кажется, разработчики, которые предпочитают такие языки, как Ruby, больше тяготеют к CoffeeScript, чем те, которые этого не делают. Хотя в любой группе часто встречаются разработчики, которые любят или ненавидят мнение об этом.

Я думаю, что CoffeeScript нацелен на людей, которые понимают JavaScript, но для которых это не их язык выбора. В противном случае (очевидно) они предпочли бы просто писать JS. Если кто-то знает все плюсы и минусы JS при запуске с CS, очень важно получить максимальную отдачу от использования CS.

Я работаю в Yammer со многими старшими инженерами JavaScript; никто не использует это. Я заметил, что друзья, которые его используют и очень довольны этим, — люди из Rails. Например, в Posterous они используют его, но у них нет настоящих инженеров JavaScript. У нас есть люди из Rails, но они делают только Rails, а не JavaScript.

Я должен был бы отложить Джереми для этого, но я думаю, что это в основном нравится Rubyists, которые считают, что они проводят большую часть своего дня в JavaScript. Знание CoffeeScript не заменяет знания JavaScript. Область вид отчасти отличается; кроме этого, это просто более чистый синтаксис.

Я бы определенно сказал, что он нацелен как на существующих разработчиков JavaScript, так и на тех, кто работает с другими динамическими языками, которые немного новички в мире переднего плана. Я лично обнаружил это, уже имея приличное количество «сырого» опыта работы с JS, и мне было приятно работать с тем, как я представляю современный клиентский язык. Хотя это всего лишь мой личный подход к изучению вещей, я не думаю, что я бы погрузился в CoffeeScript без какого-либо предварительного знания языка, на котором он был построен.

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

Если вы любите JavaScript, но хотите писать более выразительный код, CoffeeScript станет для вас очевидным выбором.

Цель CoffeeScript — оставаться как можно ближе к базовому JavaScript, одновременно улучшая синтаксис языка. Это сильно отличает его, скажем, от Dart, или GWT, или от того, что переупорядочивает код, такой как TameJS. Поэтому я думаю, что если вы любите JavaScript, но хотите писать более выразительный код, CoffeeScript станет очевидным выбором.

Очевидно, что он непропорционально популярен в мире Ruby, поскольку он позаимствовал многие Ruby-измы, такие как postfix if / exc, и имеет чрезвычайно выдающегося евангелиста в dhh, но он также довольно популярен в мире Node.js, что говорит о многом.

Я годами использовал JavaScript и написал книгу О’Рейли о веб-приложениях JavaScript . Я думаю, вы могли бы сказать, что я выучил все тонкости языка. Тем не менее, я лично планирую никогда больше не писать простой JavaScript, не потому, что мне не нравится язык, а потому, что я очень люблю писать CoffeeScript.

CoffeeScript предназначен для людей, которые глубоко понимают и уважают JavaScript.


С выпуском Dart сообщество веб-разработчиков столкнулось с опасностью того, что Google заставит новый нестандартный язык добавить в веб-браузер.

Дарт это другая история. С выпуском Dart сообщество веб-разработчиков столкнулось с опасностью того, что Google заставит новый нестандартный язык добавить в веб-браузер. Как мы хорошо знаем из Интернета — как только вы отправляете что-то в браузер, оно всегда будет там. Кроме того, Dart отступает от динамизма JavaScript и вместо этого существует как несколько статичный язык, где типы могут проверяться во время компиляции, но стираются во время выполнения. Сообщество JavaScript восприняло это как циничный жест, заставляющий разработчиков Java чувствовать себя как дома в Dart, имея возможность писать типы, похожие на типы Java, даже если они рассматриваются как комментарии при запуске программы. Не только разработчики JavaScript настороженно относятся к Dart push, но и браузерные настороже.

Теперь давайте возьмем случай CoffeeScript. CoffeeScript чувствовал угрозу для удивительного числа разработчиков JavaScript, в отличие от других языков. Вы не слышите, чтобы JS-программисты беспокоились о других новых языках, таких как Clojure или Scala, или даже о языках компиляции в JS, таких как GWT или Objective-J, когда речь идет о том же объеме.

Обратите внимание, что я не говорю о людях, которые просто хотят продолжать использовать JavaScript — я продолжаю использовать JavaScript и для многих проектов. Я говорю о пугающей риторике: «Я не буду использовать вашу библиотеку, потому что вы написали ее на CoffeeScript» или «CoffeeScript заставляет вас забыть, как писать JavaScript».

CoffeeScript чувствует угрозу для разработчиков JavaScript именно потому, что он так близок к JavaScript.

Поскольку семантика одинакова, каждая программа CoffeeScript полностью совместима с JavaScript, и наоборот. Возможно, вы уже используете библиотеку, написанную на CoffeeScript, даже не подозревая об этом (например, Zombie.js, Riak-JS или xml2js). Кроме того, фактически используется CoffeeScript — в настоящее время он является 13-м по популярности языком на GitHub.

Как разработчик JavaScript, столкнувшись с этой ситуацией — когда есть полностью совместимая альтернатива JavaScript с тем же профилем производительности — вынуждает вас ответить на вопрос: «почему вы еще не пробовали CoffeeScript?» Многие из постов, которые мы видим, являются разработчиками, которые сами оправдывают свой ответ на этот вопрос. Если бы я еще не пробовал CoffeeScript, я бы, наверное, писал такие же посты.

Настоящая битва — это создание чистых, интуитивно понятных и поддерживаемых API.

Дарт немного отличается Во-первых, это от Google! то есть та огромная монополия, о которой мы должны опасаться. Помимо различных политических проблем, Дарт, кажется, не предлагает ничего, кроме более синтаксиса, напоминающего Java, который многие разработчики не слишком любят, включая меня. Я предпочитаю придерживаться наиболее выразительных API / языков, которые есть в моем распоряжении. Однако когда дело доходит до CoffeeScript, я осторожен, потому что на самом деле это просто JavaScript, но с совершенно другим синтаксисом. JavaScript достаточно податлив для меня, чтобы создавать API и функциональные возможности, которые мне нужны. Меня не очень волнует удобство, если только оно не улучшает мою способность писать хороший код. Некоторые функции CoffeeScript, такие как деструктурирование присваивания и экзистенциальный оператор, действительно удивительны, но, если честно, они просто незначительны, и аналогичные функциональные возможности могут быть получены в JavaScript (см. Также JS 1.7 для деструктурирования присваивания!), Хотя немного больше многословия. Настоящая битва — это создание чистых, интуитивно понятных и поддерживаемых API. CoffeeScript не поможет вам в этом. Как я уже сказал, это сахар.

Я не думаю, что это боится чего-то нового. По крайней мере, для меня это больше не означает, что мне не нужно чрезмерно проектировать и лучше контролировать мой JS.

Трудно говорить за других, но у меня нет впечатления, что многие разработчики JavaScript избегают CoffeeScript, потому что избегают новых вещей. Во всяком случае, я думаю, что большинство разработчиков, которые вообще знают о CoffeeScript, вероятно, находятся на раннем этапе освоения.

В частности, я считаю, что нежелание добавлять этап компиляции CoffeeScript в разработку на стороне клиента объективно оправдано и не связано с какими-либо предыдущими инвестициями в изучение JavaScript.

С любой потенциально разрушительной новой технологией те, кто сделал ставку на нынешний способ ведения дел, как правило, проходят пять « стадий горя ».

Во всяком случае, это был мой опыт …

  1. Отрицание — «Я никогда не буду использовать CoffeeScript». (или дартс)
  2. Гнев — «Я бы хотел, чтобы люди уже замолчали об этом!»
  3. Торг — «Хорошо, я думаю, у него есть * некоторые * хорошие части».
  4. Депрессия — «Я не могу поверить, что я должен этому научиться».
  5. Принятие — * Пожав плечами * ~ «Используйте лучший инструмент для работы».

Тем не менее, есть некоторые основания для критики CoffeeScript (и Dart). Однако, хотя CoffeeScript пытается придерживаться «духа» JavaScript (краткого кода и т. Д.), Конечная игра для Dart — заставить разработчиков писать совершенно другой язык (предпочтительно интерпретируемый в виртуальной машине браузера, вместо того, чтобы предварительно скомпилировать в JS). Дарт больше похож на Java, чем на JavaScript.

Наиболее обоснованная критика в отношении любого языка, который попытается вытеснить JavaScript, заключается в том, что JS обладает самой большой в мире установочной базой из всех языковых сред выполнения (для настольных браузеров, серверов и мобильных устройств). Возможно, он не идеален, но что касается распространения, он «просто работает».

Брендан Айх уже выразил заинтересованность в том, чтобы аспекты CS сложились в будущие версии ECMAScript. Напротив, Дарт подвергся резкой критике не только разработчиков JS, но и сообщества WebKit.

Да и нет. Я, как правило, более критично отношусь к вещам, прежде чем попробую их, но я попробовал CoffeeScript, чтобы увидеть, что же это за реклама. Это было приятно, но оно того не стоит. Зачем нужен скомпилированный язык, чтобы * просто * помочь вам с обычными JS-бородавками и сделать JS более «красивым»? Вот что меня отталкивает. Хотя JavaScript-инженеры склонны быть элитарными, я с этим согласен, но в этом случае я считаю, что на то есть веские причины. Причина в том, что не пишите совершенно другим языком, чтобы исправить некоторые проблемы.

[…] Мы просто так устали от фрагментации.

CoffeeScript и Dart даже не сравнимы. Дарт стремится заменить JavaScript, CoffeeScript — не что иное, как хороший слой краски. Вы можете использовать CoffeeScript и по-прежнему «всегда делать ставки на JS». Я думаю, что разработчики фронт-эндов рады изучать новые вещи (наша среда всегда нарушена, вам нужно учиться чему-то, чтобы выжить), мы просто устали от фрагментации. Совершенно оправданно волноваться, если вы видите «ActiveX 2.0». CoffeeScript не является угрозой для JavaScript.

Я полагаю, что обе реакции были одинаково оправданы (хотя, когда Google вовлечен, люди всегда имеют тенденцию преувеличивать свое мнение так или иначе по любой причине). CoffeeScript — это новое представление JavaScript от сообществ Ruby и Python. Дарт был новым представителем сообщества Java. Если говорить о пристрастиях к языку, я, честно говоря, не верю, что использование Java на уже динамичном и (возможно) многословном языке является правильным подходом.

Вероятно, не помогло то, что сообщество JavaScript уже испытывало аллергию на идею Dart еще до того, как об этом объявили, из-за множества «утечек» соответствий, окружающих его.

Конечно, некоторые критики CoffeeScript оправданы. Я имею в виду, что «значительный пробел — это зло» — это хромое, но «оно разделяет сообщество» законно. Есть что-то, что можно сказать о том, что JS является лингва франка. Но вы смотрите на очень распространенные ошибки JS, такие как забывание запятой в литерале многострочного объекта (или добавление дополнительной в конце последней строки), и это приводит к сбою всего вашего приложения … для определенного вида Программист (включая меня), не имея дело с этим, является большим глотком свежего воздуха.

Я думаю, что CoffeeScript и JS будут мирно сосуществовать в обозримом будущем, и будут ненавистники, и это нормально. Вот откуда ты знаешь, что это настоящий язык программирования.

CoffeeScript не намеревается заменить JavaScript или абстрагировать его, а скорее улучшить.

Как уже упоминали другие, Dart — это совершенно другой зверь от CoffeeScript, и многие критические замечания в отношении Dart касались деталей реализации и подхода Google, а не просто существования другого языка. Честно говоря, CoffeeScript — это совершенно другой язык, чем Dart.

Google использовал скорее огороженный подход к Дарту, и у меня сложилось впечатление, что они действительно не смотрят за пределы своей компании для вдохновения. Я не уверен, было ли это из-за какого-то синдрома «Не изобретено здесь», или из-за того, что им нужен язык, который понравился бы их разработчикам на Java. Тем не менее, Дарт кажется мне чем-то очень специфичным для потребностей Google, а не тем, что применимо в целом.

CoffeeScript не намеревается заменить JavaScript или абстрагировать его, а скорее улучшить. Таким образом, не только языки совершенно разные, но и мотивы, стоящие за ними, очень разные. Таким образом, трудно сравнить критику между ними.


Я никогда не использовал Sass или Less, поэтому я не могу комментировать. Я скажу, что общая идея одна и та же в том, что все они немного повышают уровень абстракции, позволяя вам быстро получить функциональность, не вводя многословную альтернативу. Я скажу, что то, что мешает мне взять CoffeeScript, сильно отличается от того, что мешало бы мне взять препроцессор CSS.

Я не много работаю с CSS и не использовал препроцессор CSS, но я понимаю необходимость управления кластером префиксов вендоров. Мне также не так комфортно с CSS, как с JS.

Я не думаю, что это абсолютно точное предположение. Хотя могут быть некоторые, кто против всей предварительной обработки клиентского кода, с Sass (и Compass) вы получаете слой поверх CSS, который очень «близок к металлу» с точки зрения синтаксиса. Одним из преимуществ Compass является возможность написать одну строку, которая преобразуется в несколько строк кода с префиксом поставщика. Не нужно запоминать различные варианты одного и того же стиля, которые в конечном итоге будут устаревшими при согласовании стандарта. Пример Sass (с компасом):

1
2
#foobar
 +background(linear-gradient(#fff, #ccc))

Это читается чисто, и в чем-то похоже на то, что стандарт может стать в CSS.

CoffeeScript, с другой стороны, добавляет новый синтаксический слой, который стремится отойти от JavaScript, включая в себя идиомы из других языков, которые не являются родными для JS.

Sass добавляет переменные, цветовую математику и множество вещей, которые нельзя сделать только в CSS. Принимая во внимание, что CoffeeScript предоставляет альтернативный подход к тому, что JavaScript уже вполне способен сделать. Я считаю, что именно поэтому мы ведем эту дискуссию — некоторые видят в этом ценность. Другие нет.

Лично я ничего не имею против препроцессоров CSS, потому что они добавляют функциональность. Я не использую их, потому что я пурист, вы могли бы сказать, но они экономят время при меньшем наборе текста — особенно для людей, которые много занимаются CSS-кодированием. Они также не стремятся починить «сломанные» вещи — просто расширяйте их. Я не использую это и не вижу себя когда-либо использующим это для личных вещей, но я не против использования этого.

Есть различие. SASS, Less, Stylus и т. Д. Привносят в CSS то, чего у него еще нет.

Есть различие. SASS, Less, Stylus и т. Д. Привносят в CSS то, чего у него еще нет: логика — оно превращает ваш CSS в приложение. CoffeeScript не вносит ничего «нового» в JavaScript таким же образом, поэтому он так спорен. Не с помощью CSS препроцессора не очень даже спорно для ничего нетривиального.

CoffeeScript обеспечивает более чистый синтаксис …

Я должен согласиться с другими ответами, что CSS-эквиваленты CoffeeScript, такие как SASS или Less, часто оцениваются совершенно по-разному. Для меня SASS всегда используется по умолчанию в любом новом проекте, над которым я работаю, в то время как CoffeeScript по-прежнему остается дискуссионным. CoffeeScript обеспечивает более чистый синтаксис, делает все возможное, чтобы защитить разработчика от плохих частей JavaScript, и позволяет избежать наследования на основе прототипов благодаря встроенной структуре классов. С другой стороны, SASS предлагает множество (очень необходимых) функций для CSS, которые в противном случае вы бы не смогли получить. Переменные, функции, миксины, список можно продолжать и продолжать. CoffeeScript на самом деле не предлагает ни одной из этих мета-функций для JavaScript, а просто сводится к синтаксическому сахару.

Я искренне удивлен, что люди все еще используют Sass / SCSS.

Sass — интересный пример, потому что сам прошел большой раскол: изначально он представлял собой полностью пустую альтернативу CSS, и, конечно, некоторые люди любили это, а другие ненавидели. Теперь он доступен в двух вариантах: значительный синтаксис «Sass Classic» и суперсет CSS SCSS. Они оба раздражающе строгие; компилятор «Sass Classic» будет кричать на вас, если вы используете столько точек с запятой. Затем пришел TJ Holowaychuk и создал Stylus , который позволяет использовать синтаксис с символами пробелов и фигурные скобки … в одном файле! Это гораздо более элегантное решение, и я искренне удивлен, что люди все еще используют Sass / SCSS.

Это не означает, что CoffeeScript должен начать принимать фигурные скобки (были бы некоторые неоднозначные случаи). Моя точка зрения заключается в том, что препроцессоры CSS на самом деле не имеют более четкого и лаконичного синтаксиса, чем CoffeeScript. (Синтаксис SCSS более популярен, чем Sass Classic, возможно, потому, что дизайнеры могут продолжать использовать фрагменты CSS, к которым они привыкли, не пропуская их через конвертер.) Они делают все по-другому. CSS на самом деле не язык; CSS препроцессоры (с их переменными и функциями).

CSS * это * язык. Просто не «язык программирования». Я вижу его точку зрения, хотя препроцессоры допускают декларативное, функциональное программирование.

Ну, я не думаю, что это обязательно так. Мне лично нравятся Less и Stylus, так же, как мне нравится CoffeeScript. Однако я не фанат абстракций HTML, таких как HAML и Jade. Я оцениваю каждую технологию независимо. Я не за или против препроцессоров в целом.


Нет — CoffeeScript предоставляет подмножество семантики JavaScript. Если вы научитесь писать CoffeeScript, почти по определению вы будете знать, как писать JavaScript. Обучение не игра с нулевой суммой. Изучение одного языка или диалекта не мешает вам знать другие.

На самом деле, так же, как людям, которые свободно говорят на нескольких языках, легко подобрать больше; программисты, которые знают более одного диалекта JavaScript, могут лучше узнать новые концепции и идиомы.

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

http://jashkenas.github.com/coffee-script/#embedded
https://bugs.webkit.org/show_bug.cgi?id=30933
https://bugzilla.mozilla.org/show_bug.cgi?id=618650

Различные инструменты и фреймворки «компилируются» в HTML почти столько, сколько существует HTML

Нет, я не думаю, что это вероятно.

Различные инструменты и фреймворки «компилировались» в HTML почти столько же, сколько существует HTML, однако знание (и понимание) сгенерированной разметки HTML только увеличилось за это время. С большинством абстракций вы неизбежно столкнетесь с крайними случаями, которые заставят вас глубже изучить основную технологию. Во всяком случае, простая абстракция над чем-то более пугающим часто обеспечивает привлекательный старт для новых разработчиков, в конечном итоге приводя их к тому, что они узнают больше об абстрактной теме, чем им было бы удобно в противном случае.

Если CoffeeScript станет «мейнстримом», тогда больше людей заинтересуются самим языком JavaScript.

Я действительно думаю (надеюсь), может быть, обратное будет правдой. Я думаю, что если CoffeeScript станет «мейнстримом», тогда все больше людей заинтересуются самим языком JavaScript. Я встречал довольно много дизайнеров, которые вообще не заботились о JavaScript, но научились вырезать и вставлять фрагменты jQuery. Вскоре они говорят: «Чувак, мне действительно нужно учить JavaScript».

Так же, как jQuery пробудил интерес к JS среди дизайнеров с его селекторами «читает как CSS», я думаю, что, возможно, CoffeeScript будет тем «наркотиком шлюза» для лучшего понимания JS, за исключением Rubyists. В любом случае, те, кто уже знают JS, имеют преимущество.

Вы недавно были в StackOverflow? Попробуйте задать вопрос о JavaScript. Однажды я спросил о каком-то разборе даты (чтобы получить следующую среду), и кто-то прислал мне целый плагин jQuery. В итоге получился однострочник, а плагин jQuery набрал наибольшее количество голосов по сравнению с правильным однострочным ответом. Это произошло с jQuery, где люди просто выбирают jQuery и никогда не удосуживаются изучать JavaScript. В Твиттере я слышал, как кто-то спрашивал о сеансах cookie, а кто-то предлагал использовать jQuery и включить плагин $ .cookie. Я беспокоюсь, что CoffeeScript в конечном итоге будет таким, когда люди будут включать это для простых приложений или когда они просто не хотят понимать JS.

Вы не можете писать CoffeeScript, не зная JavaScript. Вы отлаживаете JavaScript. Вы используете сторонние библиотеки с поддержкой JavaScript. От этого не уйти (большой недостаток в использовании CoffeeScript для реальных приложений). Так что нет, это недопустимый аргумент против CoffeeScript.

Тот факт, что этот аргумент ошибочен, является веским аргументом в пользу того, чтобы не использовать CoffeeScript. Если вы не можете отказаться от JavaScript, какой смысл?

Подобные аргументы были сделаны в то время, когда jQuery становился довольно популярным. Я не верю, что это было действительной проблемой тогда, и я не думаю, что это сейчас. Изучение CoffeeScript также потребует, чтобы вы в какой-то момент развернулись и изучили базовый JavaScript. Это не то, чего вы можете избежать, пока не наступит день (если когда-либо), когда браузеры проанализируют и выполнят его изначально. Вы столкнетесь с странной ошибкой или взаимодействием, которое заставит вас понять, во что оно переводится.

Вы не должны использовать CoffeeScript, не зная JavaScript.

Что сказал Райан

Вы не должны использовать CoffeeScript, не зная JavaScript, хотя вы можете изучать и то и другое одновременно. Я имею в виду, что там должно быть миллион людей, которые используют JavaScript, не зная JavaScript. У многих из них есть другие основные языки, и им никогда не понравится JavaScript так сильно, как им нравится Ruby, PHP или Java, поэтому они учатся столько, сколько им нужно. Это та толпа, на которую в основном ориентирована моя книга. Это как «Эй, давайте изучим этот новый хип-язык, и по пути мы будем заполнять пробелы в наших знаниях JavaScript».

Наоборот, все наоборот. Я не думаю, что это действительная проблема. Как утверждают другие, знание JavaScript является обязательным требованием для написания CoffeeScript. Поэтому, написав CoffeeScript, я думаю, что ваши знания JavaScript должны, во всяком случае, улучшиться.

JavaScript, сгенерированный компилятором CoffeeScript, является на высшем уровне, и просматривая его, вы наверняка узнаете несколько хитростей.

Однако я совершенно не согласен с тем, что тот факт, что вы не можете оторваться от JavaScript, является аргументом против использования CoffeeScript. CoffeeScript — это легкая курируемая часть языка, улучшающая его синтаксис и представляющая только «хорошие части». Другими словами, я думаю, что это улучшение.


Большое количество пользователей сообщают об изучении новых приемов и шаблонов при чтении их скомпилированного JavaScript.

Да. Большое количество пользователей сообщают об изучении новых приемов и шаблонов при чтении их скомпилированного JavaScript.

Но использование передовых методов, встроенных в компилятор, в основном не приносит пользы новичкам — это преимущество для долгосрочных программистов, которые могут в полной мере воспользоваться преимуществами краткого, удобочитаемого способа выражения своих намерений JavaScript в коде — без необходимости постоянно помните о лучших практиках. Лучшая практика, которая может быть применена и сгенерирована компилятором, лучше, чем лучшая практика, которую нужно каждый раз запоминать и выводить вручную.

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

Думаю, это научит вас становиться лучшим программистом, но если вы хотите изучать JavaScript, то изучайте его чисто.

Я думаю, что вы можете взять «это делает вас лучшим разработчиком JS» и применить это к существующим библиотекам / фреймворкам JS. Я многому научился, изучая и исправляя проблемы в библиотеках, таких как Dojo, jQuery, MooTools и Prototype. Код, созданный CoffeeScript, очень многословен и способствует микрооптимизации (что не обязательно полезно и не является «наилучшей практикой»).

Я не стал бы обращаться к CoffeeScript или его скомпилированному JS, чтобы улучшить свои навыки работы с JS, а скорее к зрелым, закаленным в битве JS-библиотекам.

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

Я думаю, в этом есть доля правды. Если вы постоянно проверяете, какой JavaScript-код выводится компилятором CoffeeScript, я думаю, что нужно кое-что почерпнуть. Например, объявление всех переменных в начале функции, чтобы предотвратить подъем переменных.

Кроме того, концепция замыканий вводится автоматически. Поначалу это может показаться неприятным, если вы просто пытаетесь создать глобальную переменную, прямо встроенную (что-то из серверной части в HTML). Благодаря этому CoffeeScript применяет полезные привычки, такие как явное присоединение переменных к глобальному объекту, если это действительно то, что вы хотите сделать …

Это не значит, что такие уроки не могут быть извлечены отдельно от использования транспилятора, но если кто-то, кто плохо знаком с JavaScript, попытается использовать CoffeeScript как способ узнать о концепциях JS, это может быть интересным началом. Хотя для начинающих JS чтение канонических книг, таких как «JavaScript: хорошие части», возможно, будет более полезным.

Как вы учитесь или становитесь лучше в чем-то, от чего вас защищали? Если вам никогда не придется беспокоиться об утечке глобальных переменных, как вы узнаете об этом позже, работая с vanilla JS? Это все равно, что дать кому-то камеру с автофокусом, которая раньше никогда не пользовалась камерой, а затем ожидать, что он знает, как использовать пленочную камеру и регулировать фокусировку, ISO и т. Д. С помощью ручных средств.

Мой рукописный JavaScript довольно сильно отличается от того, что выпадает CoffeeScript.

Я думаю, что разработчикам, которые не очень опытны в JavaScript, есть чему поучиться из результатов компиляции. Возьмем операторы? = И || =, CoffeeScript покажет им, как решить эту проблему в JavaScript.

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

Мой рукописный JavaScript довольно сильно отличается от того, что выпадает CoffeeScript; это также лучше выглядит. Я думаю, что есть чему поучиться, читая исходный код некоторых лидеров нашего сообщества и созданных библиотек JS, а не от компилятора.

Если вы, как разработчик, уже не знакомы с более тонкими частями JavaScript (ни с помощью JSLint Дугласа Крокфорда, ни с помощью JSHint Антона Ковалева), то CoffeeScript определенно станет достойным курсом по данной теме. Но только если вы воспользуетесь возможностью по-настоящему понять, почему CS приняла определенные решения на языке. Если вы спешите через это и просто пытаетесь вытолкнуть работающий прототип как можно быстрее, вы наносите вред себе только в долгосрочной перспективе. Я упоминал об этом ранее в предыдущем ответе, но не знать о некоторых внутренних принципах работы ваших черных ящиков очень опасно и контрпродуктивно.

Похоже, вы посещали мои переговоры; Я выдвигаю этот аргумент все время.

Интересно, что вы упомянули Rails. Многие люди изучают Ruby, изучая Rails. Многие люди изучают JavaScript, изучая jQuery. Но если вы научитесь так, вы не увидите весь язык. Напротив, вы работаете над чем-то на CoffeeScript, вы увидите края. Вы узнаете все об this о наследовании прототипов и typeof/instanceof итерации ключей объектов и значений массивов, а также сотне других вещей, о которых JS noobs ежедневно спрашивает о переполнении стека.

Так что да. Я вижу изучение CoffeeScript как один из способов стать знающим JavaScripter. Конечно, не единственный, но веселый и полезный.


Некоторые Rubyists говорят, что CoffeeScript выглядит как Ruby, Pythonistas говорят, что CoffeeScript выглядит как Python, и я слышал, что Haskellers говорят, что CoffeeScript выглядит как Haskell.

Я боюсь, что это глупый вопрос. Некоторые Rubyists говорят, что CoffeeScript выглядит как Ruby, Pythonistas говорят, что CoffeeScript выглядит как Python, и я слышал, что Haskellers говорят, что CoffeeScript выглядит как Haskell. Дело в том, что семантика CoffeeScript — это всего лишь семантика JavaScript — здесь определенно не меньше «перетасовки языка».

Я боюсь, что станет приемлемым отказаться от жизненно важной кривой изучения JavaScript и просто ложно быть уверенным, что код, который вы пишете на CoffeeScript, работает так же, как и на этом другом языке, который вы знаете. Для команды с крайним сроком я определенно вижу привлекательность более унифицированной среды разработки. Ruby и CoffeeScript — симпатичное совпадение — гораздо больше, чем JavaScript и Ruby. Я думаю, что понимание JavaScript жизненно важно, особенно на этой ранней стадии (отладка все еще может быть неприятной).

Зависит от их настройки. CoffeeScript, как и JS libs, имеет ошибки от выпуска к выпуску (даже те, которые влияют на использование в разных браузерах), что может привести к поломке существующего кода CoffeeScript.

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

В отличие от библиотек JS, которые могут жить в CDN, сахар вокруг CoffeeScript должен быть скомпилирован для каждого файла JS (если не скомпилирован вместе). Это может сделать сгенерированный CoffeeScript JS менее идеальным для отдельных сторонних скриптов. CoffeeScript добавляет еще одно «что-то», с которым команде придется ознакомиться и овладеть навыками, что стоит времени / денег и этого можно избежать, просто используя JS (JS lib + linter).

Как человек, который провел довольно много времени в мире .NET, я видел, что этот аргумент использовался для поддержки разработки методом перетаскивания и некоторых особенно сложных абстракций над HTML, CSS и JavaScript. Этот опыт заставил меня скептически относиться к долгосрочному значению сосредоточения внимания на высокой производительности за счет понимания вашего стека разработки.

Я бы не сказал, что это способ избежать «языковой перестановки». Хотя CoffeeScript и Ruby могут иметь общий синтаксический сахар, у каждого свои способы работы с вещами. Хотя CS, несомненно, покажется знакомым разработчикам Ruby, процесс обучения еще не закончен.

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

Я думаю, что опасность для разработчиков Ruby заключается в том, что CoffeeScript затмевает некоторые загадочные аспекты, присущие JavaScript.

Хотя вы можете в конечном итоге набрать меньше общих символов в файле * .coffee, вам все равно нужно позаботиться о том, что заканчивается в файле * .js. Это приходит с опытом, а не (только) с новым синтаксисом.

Вы пишете на одном языке, но отлаживаете на другом …

Что касается «меньшего количества языковых перетасовок», я предполагаю, что вы имеете в виду, что это похоже на Ruby везде в вашем приложении — это полностью неверно. Вы пишете на одном языке, но отлаживаете на другом языке, и ни один из них не является Ruby, так что это на самом деле более беспорядочно.

Если синтаксис JavaScript замедляет вас, то вам нужно научиться использовать текстовый редактор или научиться печатать. В CoffeeScript нет ничего быстрее. Введение CoffeeScript в ваш рабочий процесс фактически увеличивает «перемешивание»:

Многие люди игнорируют проблему отладки, но 20% дня мы пишем ошибки, остальные 80% мы их исправляем (не отрицаю). Отладка это большая проблема.

Вы отлаживаете код, который не написал. Вы должны выяснить, что делает компилятор, а затем выяснить, почему код не делает то, что вы хотели. Затем вам нужно перейти к вашему CoffeeScript и выяснить, как исправить его в другом синтаксисе. Обычно это не так уж и плохо, но при использовании некоторых более интересных функций CoffeeScript он может выглядеть действительно «машинным кодом». Одна строка в CoffeeScript может превратиться в несколько строк безумно выглядящих вещей ( см. Здесь ), которые, опять же, вы не написали, поэтому вам нужно выяснить, почему это выглядит так, а затем, почему это не работает.

Это «перетасовывание» назад и вперед — странный шаг, который замедляет вас, потому что это не ваш код, который вы просматриваете. Я обнаружил, что вернулся к созданию в моем коде большого количества console.log вместо использования точек останова и выражений наблюдения и т. Д., Что является полным позором и медленнее. Но для меня это самый быстрый способ «перетасовать» между отлаживаемым JavaScript и написанным мной CoffeeScript.

Будет ли CoffeeScript выполнить работу быстрее? Конечно, некоторые известные профессионалы JavaScript / Ruby пришли к такому выводу.

Рубиисты, безусловно, легче продавать на CoffeeScript, чем, скажем, Java-программисты. Но наиболее распространенные вопросы, которые я получаю от Rubyists, звучат так: «Подождите, зачем нам нужен отдельный язык? Почему мы не можем просто скомпилировать Ruby в JS?» И я пытаюсь объяснить им, что, ну, компиляция » a = b » из Ruby в JS потребует от вас проверить, является ли функция b, и если это так, запустите ее и верните ее значение … и скомпилируйте » x = y + 1 «потребует от вас запуска библиотеки BigDecimal, потому что все числа Ruby имеют бесконечную точность … и так далее. Этим людям нужно учиться этому, смотрите, когда вы находитесь в браузере, вы находитесь на газоне JavaScript, и вы должны с этим мириться. Могло быть и хуже. Это может быть статически напечатано.

Будет ли CoffeeScript выполнить работу быстрее? Конечно, некоторые выдающиеся профессионалы в JavaScript / Ruby (такие как Сэм Стивенсон, 37signals, создатель Prototype.js) сами пришли к такому выводу. Очевидно, что это зависит от множества факторов … иногда то, что вам нужно, это свежая перспектива, и новый язык может дать вам это.

CoffeeScript по своей природе не является Rubyish.

Это довольно важный вопрос, и я не думаю, что это предположение обязательно верно. CoffeeScript по своей природе не является Rubyish, как и Pythonist по своей сути. Он заимствует функции из обоих языков, но в конечном итоге его схемы основаны на JavaScript. Цель CoffeeScript не состоит в том, чтобы абстрагировать JavaScript для разработчиков, которые не хотят его изучать, таких как ныне несуществующий RJS. Таким образом, это не помогает с перетасовкой языка.


Неудивительно, что многие предпочтут чище и короче

1
2
3
4
5
6
7
8
9
class MyClass
  constructor: ->
    alert ‘constructor’
   
  doSomething: ->
    alert ‘doing something’
     
c = new MyClass()
c.doSomething()

Над…

Мой вопрос: гарантирует ли удобство чтения CoffeeScript?

Вы можете написать нечитаемый код на любом языке.

Вы можете написать нечитаемый код на любом языке … но да — одним из основных направлений CoffeeScript является удобочитаемость: выражение концепций и шаблонов JavaScript в минимальной и удобочитаемой форме, которую мы можем найти.

Ваш «классный» пример хороший. Если вы хотите создать много объектов, которые используют общие методы в JavaScript, это сделать нелегко. Есть много способов разорвать объект «прототип», пока вы пытаетесь настроить цепочку прототипов. Вам остается либо писать нечитаемый шаблон каждый раз, когда вы хотите соединить два прототипа вместе, либо использовать вспомогательную библиотеку, которая скрывает от вас базовую ориентацию объекта. Классы CoffeeScript — это простой способ определить функции конструктора вместе с их свойствами прототипа и цепочкой прототипов. Побочным эффектом является удобочитаемость простого написания того, что вы имеете в виду:

1
class Square extends Shape

… вместо полудюжины строк кода для манипулирования прототипами в JavaScript:

Естественно, поскольку я больше работал с JavaScript, он более читабелен для меня, чем CoffeeScript.

Это не тот JavaScript, который я бы написал, но я понимаю вашу точку зрения. CoffeeScript может иметь отличную читабельность, и большая часть кода CS, который я видел, является краткой и выразительной, но я не думаю, что это обязательно означает «более интуитивный». Естественно, поскольку я больше работал с JavaScript, он более читабелен для меня, чем CoffeeScript. Опять же, это похоже на вкус, и очень сильно зависит от предшествующего языкового воздействия. Специалист по Ruby, вероятно, поймет код CoffeeScript раньше, чем JavaScript, но это будет наоборот, скажем, для разработчика PHP или Java, где ключевые слова играют центральную роль в определении класса и функции. В CoffeeScript у вас есть очень минимальные и выразительные операторы, которые не всегда так понятны.

Нет. У разработчиков разные мнения относительно того, что они считают читабельным. CoffeeScript похож на JS-библиотеки в том, что все они добавляют синтаксический сахар, и у каждого разработчика / команды есть свои предпочтения (MooTools, jQuery, Dojo, CoffeeScript, CoffeeScript + libs и так далее).

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

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

Рассматривая этот вопрос в общем контексте других, разработчик, который еще не понимает JavaScript, нуждается в чем-то большем, чем аналог аналогичной реализации классического наследования на их серверном языке. Я полагаю, что размещение псевдоключевого слова «class» перед разработчиком из типичного объектно-ориентированного языка может быть даже вредным в долгосрочной перспективе.

«Читаемость» субъективна. Я думаю, что вы затронули что-то на примере «класса». Для разработчиков из классического программирования (C #, Ruby и т. Д.) CoffeeScript, вероятно, ощущается как глоток свежего воздуха. Для меня, изучив JavaScript, как мой первый «настоящий» язык программирования, мыслить в терминах классов кажется чужим.

На мой взгляд, идеальное сочетание CS и JS будет добавлено автоматически, без необходимости писать лишние скобки или фигурные скобки. Тем не менее, я мог бы обойтись без автоматического return в конце каждой функции.

Я также не фанат того, как CS угоняет for in чтобы стать циклом i++ — вместо этого вы должны написать for of возможность перебирать объекты (когда отсутствует * .length).

Это может быть потому, что JavaScript не является языком, основанным на классах. Это прототип, и это пугает людей, которые к этому не привыкли. PHP или Rails разработчики приходят к JS и не знают, как правильно его использовать. Поэтому они придумывают хаки, чтобы заставить его работать, и даже выглядят как другие языки. Это не ответ. Если вам нужно использовать классы, вы можете написать мини-библиотеку и сделать ее чистой, например:

Единственная реальная разница — отсутствие скобок. Мне на самом деле нравится идея Брендана Эйха о JS без паранов, но мне нравится идея, что ее запекают и не меняют язык полностью.

Я проверяю код на gerrit от моей команды каждый день. Немного JavaScript, немного CoffeeScript. Мне так тяжело следить за тем, что они пытаются сделать в одном синтаксисе против другого. Возможно, это иногда более устно читаемо, но это еще не сделало его более понятным для меня. Возьмите эту строку, например:

Это 160 столбцов кода, читаемого на словах, прямо из нашего приложения, но я понятия не имею, что он делает. Самое интересное, что вы в конечном итоге отлаживаете подобные вещи .

В CoffeeScript есть некоторые аспекты, которые менее читабельны.

Толстая стрелка => связывает контекст с функцией, которая звучит великолепно, но поощряет глубокое вложение, анти-паттерн.

Соедините это со значительными пробелами в нескольких строках кода, и вы получите беспорядок. Неструктурированный код с обратными вызовами и множеством других операций чрезвычайно сложен для отслеживания: для меня нет закрывающей скобки, чтобы поместить курсор и посмотреть, где я нахожусь с моим текстовым редактором. Некоторые говорят: «Не пиши такой код». Я не пишу весь код, с которым я работаю.

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

С другой стороны, я заметил, что синтаксис класса находит логический отклик у людей, которые не являются экспертами в JavaScript, но являются экспертами в некоторых других языках. Внезапно они понимают, что могут писать модульный код переднего плана вместо того, чтобы приковывать jQuery к забвению. Лично я не использую class и не пишу JavaScript так, как вы это делали в примере, но я думаю, что это полезный синтаксис для хороших программистов, менее знакомых с JavaScript.

Что касается читабельности, хорошей документации нет замены. Я смотрю на аннотированный источник Backbone.js и думаю: «Ух ты». Было бы, возможно, на 30% меньше строк, если бы оно было написано на CoffeeScript, но было бы немного легче понять.

Я думаю, что большая победа в возможности записи. Это не просто меньшее количество нажатий клавиш (печатание редко является узким местом для кодирования); об этом меньше думать. Распространенная идиома Node.js пишет:

… в верхней части обратных вызовов. Думаю, я мог бы сохранить это как фрагмент кода, но я бы предпочел просто набрать эквивалент в CoffeeScript.

Просто требуется меньше мозговых циклов. Таким образом, я могу сосредоточиться на ядре обратного вызова.

Конечно, это хорошая причина для изучения CoffeeScript или любого другого языка высокого уровня. Читаемость является важной частью разработки, поддержки и расширения кода на любом языке. CoffeeScript делает шаг вперед, используя пробелы, а это означает, что плохо отформатированный код просто не скомпилируется.

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


Я хотел бы подать общее возражение против того, как эти вопросы сформулированы. Они создают ложную драму, где никому не нужно существовать. CoffeeScript — это забавный маленький язык, который пытается подтолкнуть JavaScript в определенном направлении: какой минимальный и читаемый синтаксис мы можем найти, чтобы выразить известные хорошие части JavaScript. Если вам это нравится, это здорово; если вы этого не сделаете, это также здорово — JavaScript — замечательный язык. Поскольку CoffeeScript и JavaScript имеют общую семантику, они всегда прекрасно ладят. Лично я пишу много и того, и другого.

Примечания интервьюера: Абсолютно. Я никогда не собирался создавать пламенную войну, когда, в конечном счете, мы имеем дело с полезными инструментами. Это никогда не может быть плохо! Тем не менее, я часто задавал вопросы, которые я задавал в Твиттере, блогах и социальных сетях. Даже если они необоснованны, важно признать, что их спрашивают, и обсудить их. 🙂

Я думаю, что CoffeeScript — отличный выбор для любителей и единоличных операций. В команде я бы советовал против этого, если вы еще не в курсе.

Что сказал Райан Выучи JavaScript. Это потрясающий язык. Но это не мой любимый язык, потому что есть CoffeeScript.

+1 к примечанию Райана Флоренса.

Я не думаю, что кто-то может отрицать, что Джереми Ашкен создал нечто замечательное. Тот факт, что мы все говорим об этом, свидетельствует об этом. Я бы посоветовал всем, кто вцепился в каблуки, не использовать CoffeeScript, чтобы хотя бы попробовать. Сделав это сам, я все еще предпочитаю JavaScript, но по крайней мере теперь я могу понять, почему он привлекает других.


  • Качаем с CoffeeScript
  • Дело против CoffeeScript

  • Теперь, когда некоторые из лучших в бизнесе предложили свои собственные мнения, я хотел бы услышать ваше мнение в комментариях. Хотя большинство из этих вопросов были предоставлены социальными сетями и сообщениями в блогах, последний вопрос, на который я лично больше всего интересовался, узнал ответ.

    Дайте мне знать ниже!