Javascript по-взрослому

mordamax

Member
Здорово.. CoffeeScript сам юзал.. хотел переписать так же этот судоку, как практика, но только на рельсах.. там все в коробке, клево.., что-то пропала мотивашка, не особо получалось.. кстати, есть примеры? может на github'e ? был бы очень рад посмотреть
 

Dre.hz

Active Member
Да, в рельсах или Padrino/Sinatra удобно, но совсем не проблема юзать его и в других проектах. В той же symfony2 кофе легко прикручивается как фильтр для ассетов. А если нужно как-то абстрактно, без последующей привязки к компиляции, (например, в моей практике это проекты на TYPO3), то я обычно просто создаю папки /coffee и /js в папке шаблона, и, на время собственно кодинга, запускаю компилятор, который мониторит редактируемые файлы .coffee и компилит их в .js.

Еще можно подключать компилятор кофе написанный на js, тогда и компилить ничего не надо, он на лету все сделает на стороне клиента.

Пример кофе-файла. Это один из котроллеров для AngularJS. Вторая строка (с nomunge) компилитруется без изменений и адресуется yui-компрессору js, чтобы заставить его не переимновывать параметры функции.

Код:
window.DashboardCtrl = ($scope, $location, APIEventVisitors, APIEvents, $q) ->
  "$scope:nomunge, $location:nomunge, APIEventVisitors:nomunge, APIEvents:nomunge, $q:nomunge"
  self = $scope
  self.setInterface
    class: 'browser'
    columns: 2
    menu: 'dashboard'
  self.blend()

  deferreds = [$q.defer(), $q.defer(), $q.defer()]
  promises = [deferreds[0].promise, deferreds[1].promise, deferreds[2].promise]
  self.events =
    my:     APIEvents.query({type: 'my'}, self.resolveQ(deferreds[0]), self.failureQ(deferreds[0]))
    future: APIEvents.query({type: 'future'}, self.resolveQ(deferreds[1]), self.failureQ(deferreds[1]))
  self.latestRegistrees = []
  if self.hasRole 'trader'
    self.latestRegistrees = APIEventVisitors.query({mode: 'latest_registrees'}, self.resolveQ(deferreds[2]), self.failureQ(deferreds[2]))
  else
    deferreds[2].resolve()

  $q.all(promises).then ->
    self.unblend()

  self.viewEvent = (event_id)->
    $location.path "/event/#{event_id}"

  self.daysRest = (date) ->
    now = new Date().getTime()
    diff = ((date - now)/(60*60*24*1000)).ceil()
 

GrAndSE

Тёмный
Модератор
Активно конечно использую jQuery. Если для чего-то большего чем свистелки обычно в ход идут undersore + backbone.
От CoffeScript отказался из-з отсутствия консольки в которой можно проверить работоспособность куска кода и невнятных ошибок, которые порой очень сложно отслеживать - мало того, что цепочка вызовов из какого-нибудь хенделера мало что говорит о том, что же привело к его вызову, так еще и код на js порой очень сложно трансформируется обратно в CoffeScript.
Интересно для меня выглядит еще ClojureScript, но там конечно вся сила проявляется когда Clojure крутится на сервере, а ClojureScript на клиенте, но пока храбрости и наглости на такое не хватило.

Что до NodeJS, то мне он в реальном проекте не понравился. Сначала конечно было забавно, но когда началась вермишель из-за усложнения бизнес-логики то там, то там и выяснилось, что оно течет и довольно часто падает, а порой частенько не асинхронное, то понял какой гемморой может быть. Было это два года назад, сейчас конечно библиотек для него стало побольше, сам nodejs стал лучше, но до сих пор течет. В плане разработки чего-то, чему нужно держать много открытых соединений, работающих асинхронно, то здесь все же Erlang'у нет равных. На втором месте для меня будет Tornado, так как работает он во многих случаях не хуже NodeJS, а как язык Python мне гораздо ближе и доставляет гораздо больше удовольствия разработка на нем. На третьем наверное gevent. Дальше идут Clojure, Scala, Java, что-то из мира Ruby в конце-концов :) Ну а с NodeJS связываться не хотелось бы больше.
 

Dre.hz

Active Member
От CoffeScript отказался из-з отсутствия консольки в которой можно проверить работоспособность куска кода и невнятных ошибок, которые порой очень сложно отслеживать - мало того, что цепочка вызовов из какого-нибудь хенделера мало что говорит о том, что же привело к его вызову, так еще и код на js порой очень сложно трансформируется обратно в CoffeScript.
Консолька есть. Вариант первый - прямо на сайте (см "Try CoffeScript"), и вариант второй - прямо в шелле (если линукс) выполнить команду coffee.

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

GrAndSE

Тёмный
Модератор
Консолька есть. Вариант первый - прямо на сайте (см "Try CoffeScript"), и вариант второй - прямо в шелле (если линукс) выполнить команду coffee.
Ну это конечно хорошо, да только меня не интересует проверка куска кода в шелле или на каком-то левом сайте. Привык как-то прямо в браузере в различных Developer Tools с автодополнением, инспекцией писать куски javascript привязанные прямо к моей странице изменять контент, а потом переносить уже в js файлы. Да и отлаживать консоль в браузере помогает очень сильно, т.к. в селекторе ошибку сделать, или вообще с логикой перемудрить проще простого.

Может я какой-то момент упускаю и можно как-то все просто и с CoffeScript'ом или еще чем-то все завернуть, но удобного для меня решения я не нашел.

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

Многое зависит от сложности и обьема скрипта. Как-то получается, что маленькое что-то и на js писать удобно, в случае большого велика вероятность ошибки и как следствие для меня важна скорость локализации ошибки. Опять же, возможно я чего-то не улавливаю :)
 

lexacar

New Member
Кто поможет исправить javascript движок не безвозмездно естественно))
 

founder

Member
Ребят очень нужна помощь!!! нужно взять несколько уроков по java. мне нужно НЕ весь курс, а несколько функций! или даже в написании кода и объяснение куда нужно сам код пихать. новичков просьба не беспокоить!!готов платить!!!подробности в ЛС.
 

mordamax

Member
@founder, здесь нужно понимать отличие Java от JavaScript. Уточните пожалуйста для себя и здесь в топике какой ЯП вы имели ввиду. Если все-таки JS, то думаю могу помочь
 

Kichrum

Kichrum.org.ua
Ребят очень нужна помощь!!! нужно взять несколько уроков по java. мне нужно НЕ весь курс, а несколько функций! или даже в написании кода и объяснение куда нужно сам код пихать. новичков просьба не беспокоить!!готов платить!!!подробности в ЛС.
первый же пункт:
1. Создаем файл HelloWorld.java в любом текстовом редакторе и пишем в него:
Теперь ты знаешь, куда писать код.

А вот c JavaScript - еще проще. Нажимаешь F12 (Chrome), переключаешься на консоль и туда уже можно писать :blush:
 
Зверху