Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
… и в качестве «платы» желает популяризовать ...
Перестаньте пытаться поработить людей на StackOverflow, отвечая на их JavaScript-вопросы кодом на CoffeeScript. Перестаньте пытаться получить помощь по JavaScript, выкладывая код на Coffee, который мы не понимаем.такие случаи имеют место быть.
Слава Богу, это решает сообщество, плюсуя, а не авторитарные личности с призывами «запретить».
Вопрос в том, действительно ли она удобная
А если удобная, то не достигается ли это удобство ценой (значимой) потери эффективности.
Ну раз народ использует — то наверное удобная.
разница пренебрежительна мала и действильно не играет роли на данном этапе развития хардваре и скорости интернета.
Выбирать технологии под знания *всей* команды — это прямой путь к отставанию от прогресса. «Мы этого не знаем» — это вообще не аргумент. <...>
Специалистов нужно слегка подталкивать к развитию своих знаний и навыков, даже если им этого не особо-то и хочется, но в проекте это нужно.
Пару коммитов быстро решат проблему, останется только пересобрать все asset. А вообще, просто внезапно ES6 не вкатится, в любом случае его нужно будет включать руками или наоборот отключать специально.
isnt(!==) и конструкцию из VB. Какой то консерватизм, как аргументы против выделения кодом отступами. JS сам по себе не самый легкочитаемый и вообще простой язык с классным синтаксисом. Благо, это исправляется новыми версиямиisnt добавлен в язык для придачи ему большей человечности (пожалуй, как и конструкция из VB), и легко читается, если девелопер хоть чуть-чуть знает английский, это разумная эволюция, а если ваш глаз привык цепляться за = , то любой редактор выделяет isnt совершенно тем же цветом. Ну а то, что автор пихал конструкцию из VB куда не надо и потом весело дебагил — его проблемы.Используя диалект языка
Автор просто ленится потратить от силы две недели на изучение такого просто языка как Coffee.
struct?.substruct?.field if(b = a) { ... }
if(b == a) { ... }
А автор оригинальной статьи настолько невежествен, что даже не знает, что на диалекте asm.js не предполагается ничего писать и уж тем более изучать код транслированный из него.Неа. Автор статьи настолько невежественен, что начинает своё повествование со ссылки на реальный код из реального проекта, который реально руками написано на asm.js.
|0.Но что такое 1894007588 и 899497514
The constant values used are chosen as nothing up my sleeve numbers: the four round constants k are 230 times the square roots of 2, 3, 5 and 10.
Если человек полез на этот уровень оптимизации, то работать с учетверёнными индексами ему ничего не стоит.Ок, понял. Значит Louter не человек. Сообщите администрации, чтобы его забанили или посмотрим как долго этому роботу удастся вводить людей в заблуждение?
в отличие от компиляторов, которые по любому поводу тупо считали адрес через сдвиги и сложения.Вы бы ещё про компиляторы Фортрана 60х годов вспомнили! Современные компиляторы, как бы, самую малось поумнели и уже давным-давно такого не делают.
tp[(i << 3) >> 2] = +(+2 * tp[((i - 1) << 3) >> 3]);
если на SO ответить на вопрос с CoffeeScript кодом на JS, то вопрошающий будет удовлетворён
Тем временем с Coffee всё наоборот. Что за фигня происходит в скомпилированном JavaScript-коде? Я понятия не имею. Для меня это чёрный ящик. Я не люблю чёрные ящики. Они чёрные и форме куба. И это всё, что я знаю о чёрных ящиках, они ничего не говорят мне о том, что происходит внутри. Написание JavaScript-кода автоматически означает, что у нас есть полный контроль над тем, что мы делаем, и это дорогого стоит
well, since javascript is the new assembler, no wonder people HAVE to use something more sane :)
# Conditions:
number = -42 if opposite
Что значит не нужен, что опять по пол страницы для создания XMLHttpRequest писать?
let xhr = new XMLHttpRequest({anon: true});//anonymous request
xhr.open("GET", "api.site.com");
xhr.responseType = "json";
xhr.onload = function(){
xhr.response;//this is JSON object
}
xhr.send();
uri = "http://"
uri += site_name
uri += "/"
uri += resource
uri += utm_source unless admin?
do_this if thatВключая C, Python, PHP, JS.
var a = some || "data";
var a = some if(some)
uri = "http://"
uri += site_name
uri += "/"
... еще много строк
uri += resource
uri += utm_source unless admin?
тернарный условный оператор
логическое выражение ? выражение 1 : выражение 2логическое выражение ? выражение 1 : выражение 2, вы просто убираете выражение 2 и у вас остается логическое выражение ? выражение 1, формой чего и является do_this if that. Варианта выражение 2 нету, ни null, ни false, ни undef. Выражение 1 просто не выполняется.a = b if thatif that a = ba = that ? b : nulla = "b" if 1 > 0 else "c"
a = b if thatif that
a = ba = (b if that else null)>>> a = "b" if 1 > 0
SyntaxError: invalid syntaxdo_this if that, то это trailing conditional или statement modifier (простите, не уверен как правильно перевести). С вполне предсказуемым поведением. Ничем не хуже:if that
do_this
end
Я уже отвечал на эти вопросы, таких проблем не возникает в реальном коде. Сравнение с trailing condition появилось потому, что это однострочник такой же как и trailing condition, только без else (это тоже уже обсудили).
На всякий случай замечу, что эквивалентом if (cond) x=y в CS является выражение if cond then x=y.
Отличается тем, что в первом случае это выражение, возвращающее результат. Т.е. если на JS мы можем написать:
x = test? a: b,
то на CS нужно писать:
x = if test then a else b.
в js
if (cond) statement;
это абсолютно то же самое, что в cs
statement if(cond)
в CS условие иначе, чем «statement if(cond)» записать нельзя
checkOptions = (options) ->
throw new Error("invalid options") unless options.one
for option in ['one', 'two']
value = options[option]
unless !value or value.match /^\d+x\d+$/i
throw new Error("invalid options.#{option} ")Никто вам ничего не навязывает
do_something() if ($flag);
if ($flag) do_something();
Для меня вобще дико видеть в ЯП конструкцию вида: определение-условие (statement-condition). Для меня более логично выглядит условие-определение
A B = IF DO_SMTH THEN? :) Тоже дикое и не логичное? Нет, просто другая логика.Я хочу сказать только, что вне зависимости от конкретного синтаксиса, условие должно быть первым потому, что оно при выполнении проверяется машиной первым
#!/usr/bin/tclsh
proc если {args} {
for {set i 0} {$i < [llength $args]} {set i [expr 1+$i]} {
if {[string equal "иначе" [lindex $args $i]]} {
set args [lreplace $args $i $i "else"]
}
}
if {*}$args
}
proc послать {args} {
puts {*}$args
}
если 0 {послать hi} иначе {послать lo}А что вы скажете на условие типа A B = IF DO_SMTH THEN?
Цикл с постусловием вам тоже дик и нелогичен?
x = 5 if cond else 3
cond and expr1 or expr2, но ломает привычный порядок вещей куда сильнее, чем пост-условие.Спросите питониста, чем хорош питон, и он вам процитирует ихнюю философию программирования, называемую «The Zen of Python», а в частности:
Простое лучше, чем сложное.
Сложное лучше, чем запутанное.
Плоское лучше, чем вложенное.
Читаемость имеет значение.
Если реализацию сложно объяснить — идея плоха.
Именно по этому питонисты очень гордятся генераторами.
Например, для того, чтобы двумерный массивarray = [[1, 2], [3, 4], [5,]]превратить в одномерный, питонисты пользуются вот таким простым кодом:
Не правда ли просто, не сложно, не запутанно, читаемо и легкообъясняемо?[element for subarray in array for element in subarray]
А вот несчастные рубисты мучаются с:
илиarray.inject &:+array.flatten
А бедные хаскелисты вообще надрываются:
concat array
В случае Питоньего тернарного оператора дело только в порядке вычисления.
x = 1 if 1 else 2

ваш вброс очень удивляет рубистов
использование переменных без ключевого слова var
toggle = (item) ->
if (item.enabled == true)
item.process();
return item.state;
else
item.blink();
return false;
toggle = (item) ->
if item.enabled == on
item.process()
item.state
else
item.blink()
false
toggle = function(item) {
//...
}
?toggle = function myToggle(item) { ... }var f2 = function(arg) {
var f1 = function(arg) {
if (arg <= 3) {
throw new Error('Fail');
}
};
f1(arg - 3);
};
f2(5);
> node test.js
/home/user/test.js:4
throw new Error('Fail');
^
Error: Fail
at f1 (/home/user/test.js:4:13)
at f2 (/home/user/test.js:7:3)
at Object.<anonymous> (/home/user/test.js:10:1)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:901:3

Совет автору — потратить максимум 2-3 часа своего времени и разобраться как работает coffeescript!Картина художника Алексея Саврасова «Грачи приехали». Совет комментатору — потратить 2-3 часа своего времени и начать юзать VIM mode в Emacs в Haiku OS, писать на ClojureScript и ходить на лыжах по потолку. Компилируемых в JS языков штук двести, не меньше — кто-то правда всерьез считает, что на каждый стоит потратить 2-3 часа?
Компилируемых в JS языков штук двести

undefined, использовать return не обязательно.На CS должны писать только те кто знает JS.Звучит как «На Си должен писать только те, кто знает Ассемблер» :)
Раз, кофе всегда одинаково транслируется (очень важное словно) в джаваскрипт.
Си же компилируется по-разному и зависит от это от компилятор и уровня оптимизации.
Три, ассемблер это не язык.
Улавливаете или надо продолжить?
Да ладно? Даже уровень оптимизации не влиял?
Что? Для вас сюрприз, что язык который собирается ассемблером другом? Подсказку — посмотрите перевод слова assembler.
Поймите, CS ничего нового в JS не приносит. Это только сахар.
А мы сейчас в то время живем? Нет. Значит какое нам дело до того компилятора? Или мы уже считает, что Си не нужен?
Зачем в такие крайности бросаться? Тогда давайте и язык ассемблера называть сахаром.
Стали доступны какие-то новые фичи процессора, которые из ассемблера недоступны?
action = (token, i) ->
@tokens.splice i, 0, @generate 'CALL_END', ')', token[2]
break for [tag], i in @tokens when tag isnt 'TERMINATOR'
@tokens.splice 0, i if i
doSomething (->
'hello'), 1
doSomething (->
'hello'), 1
и вызвана она дефицитом фронт-эндщиков.
Jade, например, выдаёт чистый HTML, который просто использует CSS-селекторы, с помощью синтаксиса, близкого к тому, что мы знаем как Zen Coding.
смысл "->" трудно запомнить м легко забыть, и приходится лазить в документацию
(function(){
str = '';
if (str == 0 && window.str === str) {
alert('translated correctly');
}
else {
alert('translated wrong');
}
})()
== правильно, потому что такой операции в принципе нет в CS. str
уже определена (например, так извращенно собирается какая-нибудь большая библиотечка), то глобальная переменная не будет создана; и никакой транслятор вам runtime-контекст не определит и в одном из двух случаев автоматически ошибется.никакой транслятор вам не транслирует
==
правильно, потому что такой операции в принципе нет в CS.
Описание преимуществ JSЗапросто, хотя уже и написали про это: JS не требует трансляции, работает в каждом браузере нативно, можно отлаживать без source maps и даже в MSIE (ах, эта восхитительная отладка в MSIE).
В нашей реальности
Вероятнее всего, в 1995 году CS получился бы с Си-подобным синтаксисом.
И как бы звучали аргументы создателей JS о скобках?
по-вашему, если бы люди уже привыкли к блокам отступами
фанатикам JSОх, ну ясно. Можете не продолжать свой крестовый поход, сэр рыцарь Единственного Правильного Пути.
Нам не нужен ваш кофе